네트워크, dll, 스레드 등

악성코드 및 포렌식|2021. 3. 7. 21:03

 

소켓 구현 관련 함수등 여러개

 

 

이런것을 하면 보통은 네트워크 통신을 하겟구나 하고 생각하면됩니다.

 

 

 

 

 

 

서버는 요청을 기다리는자로 나눠지고 client는 요청하는 사람으로 나눠진다

 

wsastartup 을 실행시키고 

wsasocket 을 통해 소켓을 만들고

bind는 주소를 정한다고 생각하자 ip와 포트 등

listen 은 듣기 시작합니다.

 

 

client는 위에처럼 소켓까지는 만드는데

주소를정하지않고 듣기를 시작하지않고

바로 전화를 건다고 생각하면됩니다.

 

통신을 하기위해 보낸다.

그때 서버쪽에서

client한테 뭐가왔어~~ 그러면

 

WSAAccept 연결을 승낙을 해줍니다

 

그리고

데이터를 주고받는내용이나옵니다.

그리고 WSARecv, WSASend,

 

가 나오는데

 

서버가 send를 먼저할수있고 recv를 먼저할수도있지만

 

클라이언트와 서버간에 주고받음이 있고

 

끝나면

마지막에 close 하고 

 

WSACleanup으로 소켓을 정리해줍니다

 

 

 

 

 

네트워크 통신을 확인할때는

WSAStartup을 모니터링 하면 네트워크 통신직전에 디버깅하기직전에 유용할수있다.

 

 

 

 

 

 

 

 

dll은 동적으로 라이브러리를 임포트 해주는 아이이다.

 

어떤 ex파일을 메모리에 올렸을때 windows에관련된 dll도 같이올라간다.

 

그런데 kernel32.dll 이나

ntdll 

모든 프로세스에 공통적으로 들어가는 dll

중복되게 메모리에 올리면 매우 불편하다 그이유는 3번 올리게되니까

 

이불편함을 버리기위해서 dll입니다.

 

알고보면 저 dll들은 다른 프로세스에 올라가있는것처럼 보이지만

사실 같은 메모리이다 이런형태입니다.

 

dll을 주로만들게되고

 

정적라이브러리는 그런데 없습니다.

 

 

 

 

 

악성코드를 실행했을때 

 

dll인젝션을 수행하기도하는데 system process(정상프로세스에) dll이 시스템프로세스에 같이동작하게끔

 

강제로 dll을 주입시키는 그런 프로그램

 

 

 

 

팀뷰에 있는 dll을 사용해 털리는 사건이 하나있었다 공공기관이

 

모든프로그램이 exe로 구현된게 아니니까 편하게 dll로 가져오기 때문에

 

 

 

=====================================================

 

프로세스

 

 

 

dll injection 을 하려면 강제로 쓰레드를 실행시켜서 dll을 넣을수가있다.

 

다양한 방법들을 통해서 쓰레드에 관한 api 도 주의깊게봐야한다

 

 

 

 

 

 

 

 

malware가 system프로세스에 권한을 획득하고있고

 

virtualALLocEx         메모리를 하나 할당하고 

wireprocessmemory 거기에 dll을 쓰고

 

createremotethread 쓰레드를 실행시켜서 프로세스가 실행되는 효과를 가지고있어서 주의해서사용한다.

 

 

 

 

 

 

뮤텍스

 

 

 

데이타의 무결성과 원자성을 보증하기위한 기능인데

 

보통 쓰레드나 프로세스가 다중프로세스가 돌아가는경우에나 다중쓰레드가 돌아가는 구간에서는

 

같은 자원에 같이 접속해있는 케이스들이 많다.

 

그러면 만약에 데이터가있는데 데이터를 읽어들여서 +1 하고 출력하는 부분이라고하면

 

a가 와서 +1하고있는데

b가와서 +1 을 해버리면 b는 문제가없는데 a에는 문제가 있다.

b에 2가나온다치면 나중에들어와서 2가 나올수있는데

 

a가처음들어왔는데 다시 2가나올수있기때문

두번나와서

프로세스 스케줄링 을 하다보니까 

무결성이 깨질수가있다

 

 

 

 

 

a라는 뮤텍스를 만들고 임계영역으로 들어갈수있는데 키가있어야만 들어갈수있는데 a가만들었으니

 

a가 잠금을 해버리면 b는 들어오질 못한다.

 

b는 접근을할수가없다.

 

 

 

 

 

 

 

 

 

 

 

기존에 구성해있는 windows api 들은 document로 문서화 되있다.

공식적인 도움말이라고 생각하면된다.

 

네이티브 api는 그렇지는 않고

 

ntdll.dll에 구성이되있다 ms내부에서 사용하는것들로  공식적으로 도움말로

사용자에게제공되는것이아닌데 이것들을 악성코드들이 호출하는 경우가 있다.

 

 

하위수준에 api를 다룰수있으면 상세하게 기능을 쓸수가있는것이다.

 

프로그래머가 원하는 기능이없으면 네이티브api를 사용할수도있다.

 

 

 

만약 네이티브 api가 사용된다면 이거를 보장하지를않는다.

 

ms가 언제바꿔도 이상하지않는 그런애들이라 애들을 사용한다면 정상적인 프로그램보다는

 

수상한 프로그램이라고 보는 게좋다.

 

native에서는 이것을 많이사용하기때문에 수상한 놈!!!!!!!!!!!!

Nt 나 gw가 나오면 네이티브 함수를 사용하기때문에 악성코드 가능성이 많다.

 

 

 

댓글()