CodeEngn Malware01 풀이
Wargame | CTF/Reversing

CodeEngn Malware01 풀이

악성코드소스를 분석하여 현재 이 악성코드의 공격방법을 알아 내는 것이 목표입니다.

 

소스코드를 열고 한줄한줄 분석해 보았습니다.

현 악성코드의 앞쪽 부분입니다. 단순히 TCP/IP의 헤더를 참조하여 헤더의 값을 세팅하고 있습니다.  TCP/IP 에 대하여 좀더 알아보면..

IP OSI 7계층 중에서 3계층에 속하는 프로토콜로 Network 계층을 의미합니다. 이 계층은 여러개의 노드를 거칠때마다 경로를 찾아줍니다. 그리고 다양한 길이의 데이터를 네트워크들을 통해 전달하고, 그과정에서 전송계층(Transport Layer)이 요구하는 서비스 품질을 제공하기 위한 기능적, 절차적 수단을 제공합니다

IP 헤더의 모습입니다. 코드에서도 해당 구조체 멤버들에게 직접 값을 넣어주는 것을 볼 수 있습니다.

다음은 TCP입니다. TCPTransport(전송계층) 인 제 4계층에 속하는 프로토콜입니다. 이 계층에서는 주로 양 끝단(End to end) 의 사용자들이 신뢰성있는 데이터를 주고 받을 수 있도록 해 주어, 상위계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해줍니다. 전송계층이 패킷들의 전송이 유효한지 확인하고 전송 실패한 패킷들을 다시 전송한다는 것을 뜻합니다. 종단간 통신을 다루는 최하위 계층으로 종단간 신뢰성 있고 효율적인 데이터를 전송하며, 기능은 오류검출 및 복구와 흐름제어, 중복검사 등을 수행합니다.


TCP/IP 헤더를 세팅해주는 부분밑에 공격자의 실제공격코드가 보입니다. 공격자가 정의한 IP헤더 구조체에 실제 IP헤더의 값을 넣고있고, TCP헤더 부분에는 랜덤함수를 사용하여 포트와 sequence number를 임의로 할당하고 있습니다. 그리고 반복문을 사용해 계속 반복하고 있습니다.

패킷헤더를 수정한뒤에 수정한 헤더의 시작주소값을 어떤 버퍼에 넘겨준후, memcpy함수를 이용하여 메모리에 쓰기를 시도하고 있습니다. 그리고 sendto 함수를 이용해 패킷을 전송하는 모습이 보입니다. 그리고 그 밑을보면 또 랜덤함수를 이용해 IP를 랜덤으로 할당하는 모습이 보입니다

그리고 또 눈여겨 볼점은, 전송시간을 체크하여 특정 시간이 넘으면 해당반복문을 탈출하는 구문이 보이고, Sleep 함수를 사용하여서 전송한 뒤에 임의로 delay를 주는 모습이 보입니다.

여러가지 네트워크 공격기법을 찾아본 결과, SYN Flooding 이라는 공격기법과 매우 비슷합니다.

먼저 TCP 통신을 살펴보면 Client에서 SYN패킷을 전송하고, 서버는 SYN + ACK(Sequance number+1)로 응답을 합니다. 그리고 서버는 Client 접속을 위해 메모리에 일정공간을 확보해 둡니다. 그리고 그걸 받은 Client는 다시 서버에게 SYN+ACK 패킷을 받았다는 표시로 ACK(서버에서 받은 Sequance number+1 포함) 을 서버에게 전송해줍니다.

SYN Flooding이란 TCP 통신에서 세션 연결을 위해 서버에게 SYN 패킷을 보내면 서버는 SYN + ACK로 응답을 하면서 SYN_RECV 상태가 되고 클라이언트에게 응답(ACK)을 받기 전까지는 그 상태를 일정 시간동안 유지하고 있게 되는데 그점을 이용해서 여러 아이피 혹은 포트로 변경해 가면서 출발지 정보를 바꿔 다수의 SYN 패킷을 서버로 보내 여러개의 세션을 생성 시켜 다수의 SYN_RECV 상태를 만들어 해당 리소스를 다 소모시켜 다른 사용자가 TCP 통신을 하지 못하도록 하는 공격입니다.  정답은 SYNFlood가 되겠네요

'Wargame | CTF > Reversing' 카테고리의 다른 글

CodeEngn Malware03 풀이  (0) 2018.08.07
CodeEngn Malware02 풀이  (0) 2018.08.07
CodeEngn Advance07 풀이  (0) 2018.04.30
CodeEngn Advance06 풀이  (0) 2018.03.26
CodeEngn Advance05 풀이  (0) 2018.03.26