CodeEngn malware 01
코드엔진 malware 01번 문제풀이
악성코드 분석을 진행하기 전에 아직 초보인 내실력을 그나마 향상하기 위하여 코드엔진 악성코드 문제를 풀어보자. 코드가 길기 때문에 3구간으로 나눠서 살펴보았다. 첫 번째 구간을 살펴보면
주소체계는 Ipv4를 사용하고 Ip헤더 값을 설정하고 Tcp헤더 값도 설정하는 것을 살펴볼 수 있었다. 또한 GetTickCount()함수를 사용하여 시간 값을 가져와 저장하는 것도 확인하였다. 이제 두 번째 구간을 살펴보도록 하자.
살펴보면 목적지 포트와 목적지 IP를 설정하고 출발지 IP를 Spoofing하여 랜덤 값으로 설정하고 출발지 포트도 1000~2000 사이의 값으로 랜덤 하게 설정하는 것을 확인할 수 있었다. 설정을 한 뒤에는 psdfHeader구조체에 출발지 IP와 목적지 IP를 세팅했다. 이제 마지막 3번째를 살펴보면
Memcpy를 사용해 szSendBuf에 psdHeader값을 복사하고 tcpHeader값도 복사한 뒤 TCP헤더의 checksum을 설정하고 아래도 마찬가지로 szSendBuf에 ipHeader값을 복사하고 tcpHeader값을 복사한 뒤 IP헤더의 checksum을 설정하는 것으로 보인다. 그 후 sendto를 사용하여 데이터를 전송하는데 위에서 살펴본 TCP헤더의 flag값이 2였으므로 syn형태의 데이터를 전송하는 것을 알 수 있다. if문을 살펴보면 현재 가져온 시간 값과 전에 저장한 시간 값을 빼고 1000으로 나눠 len값과 비교 후 크면 종료하는 구간도 보이고 목적지 포트를 1000~10000까지 랜덤 하게 설정하는 것도 확인할 수 있었다.
요약하자면 출발지 IP와 출발지 PORT를 랜덤 값으로 설정한 SYN 데이터를 목적지 IP의 랜덤 PORT로 전송하는 코드임을 알 수 있었다. SYN플래그와 관련된 공격이 뭐가 있을지 찾아보니 Syn_Flooding 공격을 찾을 수 있었다.

Syn_Flooding공격이란 TCP 연결 설정 과정의 취약점을 이용한 공격으로 과도한 syn패킷을 target에게 전송하고 target은 syn+ack를 전송하지만 IP값이 랜덤 값이므로 ack값이 발생하지 않아서 TCP 연결 자원을 소진시켜 외부로부터 TCP 연결 요청을 받을 수 없는 상태로 만드는 DDOS 공격이다.
이 공격에 대응하려면 Syn Cookie 설정을 이용하거나 방화벽 또는 DDOS 대응장비를 통하여 임계치 설정을 통해 과도한 연결 요청을 차단한다. 그리고 First SYN Drop을 설정하여 첫번째 SYN은 Drop하여 재요청 패킷이 도착했는지 판단한다. (대부분의 syn flooding공격의 경우 Drop시 재전송을 하지 않는다.)