개발/보안

2024.06.03 악성코드 분석 2일차

솔레이 2024. 6. 3. 17:41

case 문이 나올 경우 모든 case를 체크하고 내용 확인.

 

case 문을 활용해 여러 기능을 가진 악성코드를 원격 제어형 악성코드라고 부름.

 

 

case를 연달아 타고 들어감. 최종적으로 401070에 도착.

 

cmp(compair) 코드로 ebp+8과 76c(1900)이라는 값을 비교함.

덤프에서 따라가기 > 주소로 ebp+8값이 무엇을 의미하는지 확인.

E8 07(리틀 엔디안이기에 실제 값은 07 E8) 값이 ebp+8값이라는 것을 알게 됨.

 

07 E8 값은 2024 값이기에 1900과 2024의 상관과 앞에서 GetSystemTime 명령어를 시행함에 따라 시스템 시간에서 년도를 의미하는 것이라고 추측할 수 있음.

 

이 뒤의 덤프도 2024 06 03 10 값으로 2024년 6월 3일 오후 4시 가량이라는 것이 저장되어있음을 알 수 있음.

 

값이 동일하지 않기에 내부 코드가 실행되지 않고 프로그램이 계속 진행됨.

 

406620 주소로 이동하는 함수. 최종 위치는 4018c0 위치.

함수 내부의 명령어를 보면 User Data를 활용해 pcloud 라는 곳에 접속을 시도. pcloud 접속이 불가능할 경우 프로그램을 종료시키는 명령어로 보임.

다만 실습 환경 내부에서는 인터넷이 연결되어있지 않거나 ID PW가 깨져있기에 해당 조건 충족이 불가능하기에 디버거에서 직접 조작으로 다음 액션을 확인할 필요가 있음. 함수 내부를 확인해 수정하는 방법도 있으나 간단하게 점프 수행을 수정하는 방법으로 조작.

JMP, JNE 코드에서 점선은 점프를 하지 않음, 실선은 점프를 실행함을 의미.

 

이럴 때 우측에서 ZF를 더블클릭해서 0/1값을 조정하면 점프 여부를 수정할 수 있다.
0인 ZF 값을 수정해 jne 코드의 점프를 수행하게 된다.

위와 같이 점프를 수행해 실제 값이 어떠하던 이후 활동을 수행하게 됨.

 

이후 다시 Switch 문을 실행하는 것을 확인.  EDX덤프를 확인해 어떤 case가 실행되는지 확인 가능.

3번 case가 실행.

 

특정 명령어를 실행하는 것을 확인. edx 값을 덤프 주소 이동을 이용해 덤프에서 전체 명령어를 확인.

 

cmd 명령어를 확인.

LOG.DAT 파일을 생성하는 것을 확인. LOG.DAT 파일을 확인.

 

메모장으로 확인시 악성코드가 실행 중인 경로를 저장하는 것을 확인 가능.

코드에서 for문을 사용했기 때문에 코드를 진행해보면 다시 switch문으로 돌아오는 것을 확인. 마찬가지로 3번 case가 실행됨.

다만 이번에는 다른 명령어로 다시 실행하는 것을 확인 가능.

이번에는 user name을 추가로 수집함.

어떤 파일들을 수집하는지 수집을 완료할 때까지 실행해본다.

 

순차적으로 악성코드의 위치 경로, user name, 시간, IP 정보, 프로세스 실행 정보, C드라이브, D~F 드라이브 정보 수집.

이후 3번 case가 아닌 C case를 실행.

C case는 LOG.DAT를 암호화 하는 케이스.

 

그 이후 1번 case를 실행.

LOG.DAT가 중복되지 않도록 MAC 데이터와 함께 파일 서버에 업로드 하는 케이스.

 

이후에 2번 케이스와 D 케이스를 연달아 실행해 realmadrid.exe라는 프로그램을 추가로 다운로드 하고 실행한 뒤 자가 삭제를 진행.