악성코드 분석일지 - corona ddos bot(1)

2022. 2. 20. 02:07보안 연구/Reversing

반응형

본 티스토리 블로그는 PC 환경에 최적화되어 있습니다.

 

안녕하세요, ICMP입니다!

 

오늘 분석할 멀웨어는 ELF 파일로 디도스 공격을 감행하는 녀석입니다.

다행히도 함수 심볼도 남아있고 난독화나 패킹도 없어 분석 난이도도 높지 않으니 한번 파일을 부검해 보도록 하겠습니다.

 

 

1. 파일 정보

 

이번에 분석하면서 특이했던 점이 gdb로 중단점을 걸어도 먹히질 않고 재밌게도 해커가 분석가들을 욕하는 듯한 문구도 있었습니다!!!

역시, 코드가 멀쩡히 나와서 쉬울 거라 했는데, 조금 긴장하는 자세로 임해야 할 듯합니다...

 

 

2. 정적 분석

 

우선 제가 확인한 동작들의 큰 그림을 먼저 확인해 보도록 하겠습니다.

 

공인 아이피 91.209.70.22에 59번 포트 연결을 먼저 확립해 놓고 그 서버 주소로 DDos 공격을 날리는 방식으로 확인되었습니다.

공격 코드는 recv_buf 함수 내부에서 확인할 수 있으나 소스코드가 양이 많아서 다음 포스팅에 게시하도록 하겠습니다.

 

 

1) 희생자 ip 정보

 

확인 결과 러시아 공인 아이피고, 해커는 이전에 포트 스캐닝을 진행하여 사전에 포트 정보를 수집한 후 해당 멀웨어 코드에 반영한 듯합니다.

 

 

2) local_addr() -> 감염 PC의 아이피 정보 수집

 

IDA로 디컴파일한 결과가 일부 부정확하게 나와서 edb로 따라가본 결과 gethostname 함수를 호출해 감염된 PC의 아이피 정보를 전역 공간에다가 저장하는 것으로 보입니다.

 

 

3) signal(17LL, 1LL) && signal(1LL, 1LL)

이건 해커가 세팅해놓은 설정 중 하나인데, signal 17번 1번은 자식 프로세스가 종료되거나 프로세스를 제어하는 터미널이 닫힐 때 보내지는 신호입니다.

그런데, signal 함수 두 번째 인자에 1이 들어가는 것은 ignore 옵션이며, 자식 프로세스가 종료되거나 터미널 창이 닫히더라도 무시하라는 설정을 추가한 것입니다.

 

4) fork() -> encryption_init() 호출

encryption_init() 함수 정의를 보시면 아래와 같습니다.

이건 후에 나올 recv_buf에서 활용될 옵션을 그냥 전역 변수에다가 저장해놨다고 생각하시면 편합니다.

특별한 기능은 없기 때문에 다음으로 넘어가도록 하겠습니다.

 

5) connection() 호출

 

사전에 저장된 희생자 정보인 91.209.70.22:59로 연결을 진행하고, 성공하면 registermydevice() 함수를 호출합니다.

 

 

6) registermydevice()

연결 성공 시 해당 정보를 전역 배열에 저장하는 함수라고 생각하시면 됩니다.

여기서 기록된 전역 배열 정보를 통해 recv_buf에서 DDos 공격 및 설정에 활용됩니다.

코드를 보다가 "\x1B[0m\x1B[0;31m[\x1B[0;36m%s\x1B[0;31m]\x1B[0m Device Joined [Host:%s] [Arch:%s] [Name:%s]\x1B[0m\r\n"가 어떤 포맷으로 출력되는지 확인해 보려고 간단히 코딩해 보니 다음과 같이 확인되었습니다.

 

 

7) recv_buf()

여기가 코드의 핵심 부분이라고 볼 수 있습니다.

함수 이름에 해당 기능들이 전부 표현되어 있어서 추가적인 언급은 하지 않지만 cmd_parser의 경우 보다 세부적인 공격을 진행하는 코드가 존재합니다.

 

전역 배열에 저장된 값을 불러와 문자열을 검색한 뒤 각각 프로세스를 다시 생성하고 해당 자식 프로세스가 지정된 DDos 공격을 감행하는 방식인 듯합니다.

 

현재 해당 코드에서 구현해 놓은 방식의 DDos 공격 기법은 STD, UDP, VSE, GRE, TCP(all, syn, ack, urg), Xmas, Http이며, 이들을 모두 다루기에는 길이 길어져서 다음 포스팅에 다루도록 하겠습니다.

이상! ICMP였습니다!

감사합니다!

 

반응형