※ 악성코드 링크: https://app.any.run/tasks/26f5199f-196c-4531-a6d6-adb2177ff690/
※ 프로세스모니터 로그 링크: https://drive.google.com/file/d/1FAkY-53Wo2GrjRuXC0vwGQcIeddtlU6b/view?usp=sharing
※ 영상: https://youtu.be/UkkhbjYd4fk
1. 요약
1.1 악성코드를 실행하기 위한 다양한 포맷사용
코발트 스트라이크를 실행하기 위해 총 3번의 과정을 거칩니다. 공격자 서버의 악성코드 jar파일을 실행하기 위해 jnlp파일을 이용했습니다. jar파일은 악성코드 exe파일을 실행하고 마지막으로 코발트 스트라이크를 실행하기 위해 파워쉘을 실행합니다.
1.2 알수없는 회피 기술
샌드박스에서는 코발트 스트라이크가 실행되지만 동적 분석에서는 알수없는 회피기술로 실행되지 않습니다. 직접 디버깅을 하시면 존재하지 않은 메모리접근 예외가 발생합니다.
1.3 쉘코드의 함수 불러오기
코발트 스트라이크는 공격자 서버의 악성코드를 다운로드 받습니다. 이 때 사용하는 API함수를 사용하기 위해 API리졸빙을 수행합니다. 불러오는 DLL이름은 PEB를 참조하지만 API함수이름은 공격자가 만든 알고리즘으로 불러옵니다.
2. jnlp파일 분석
jnlp파일을 xml으로 구성된 파일입니다. 만약 시스템에 JRE(Java Runtime Environment)가 설치되어 있으면 서버의 파일을 원격으로 실행합니다. 즉, 피해자 컴퓨터에 JRE가 설치되어 있다면 공격자 서버의 JAVA파일의 악성코드를 실행할 수 있습니다.
애니런 샌드박스를 보면 javaws.exe(JRE)가 jnlp파일을 읽고 jp2launcher.exe를 실행했습니다. j2plauncher.exe는 jnlp파일을 해석하고 공격자 서버에 있는 자바포맷 악성코드를 실행합니다.
jnlp파일은 www[.]fedex[.].com의 FedEx_Deliver_invoice[.]jar파일을 실행하도록 설정되어 있습니다.
3. jar파일 분석
와이어샤크에서 공격자서버의 jar파일을 읽어오는 과정이 확인됩니다.
jar파일은 와이어샤크 Export Object기능을 사용해서 쉽게 추출됩니다.
jar파일은 2개의 악성행위를 수행합니다.
1. fedex912.exe다운로드와 실행
2. https://www[.]fedex.com/fedextracking사이트 방문 → 악성코드에 감염되었다는 것을 공격자에게 전달하는 목적으로 추측
4. fedex912.exe
fedex912.exe는 3가지 악성행위를 수행합니다.
1. 자가복제와 실행(ProgramData\\gennt[.exe])합니다. 이 때 실행 인자는 fedex912.exe파일경로와 ensgJJ가 설정됩니다.
2. 레지스트리를 이용하여 지속메커니즘을 설정
3. 비트코인 지갑주소로 추측되는 파일이 생성
DOS stub영역에 일반 PE포맷과 다르게 Salfram문자열이 있습니다.
5. gennt.exe
gennt.exe는 3가지 악성행위를 수행합니다.
1. 정상프로세스(secinit.exe)에 코드 인젝션
2. 자가복제 및 실행(C:\\ProgramData\\tonokeazexhy[.]exe)
3. 코발트 스트라이크 실행(파워쉘로 스크립트)
5.1 인젝션한 코드 추출
secinit.exe에 인젝션한 코드는 동적 분석으로 추출할 수 있지만 알 수 없는 회피 기술로 실행되지 않습니다. 아마도 비트코인 지갑 주소가 있으므로 채굴 악성코드 또는 다른 유형의 코인 악성코드로 추측합니다.
인젝션한 코드를 추출하기 위해 x32dbg로 gennt.exe를 엽니다. 그리고 샌드박스에서 발견한 인자(그림 8)를 설정하고 x32dbg를 다시 실행합니다.
CreateProcessW에 브레이크포인트를 설정하고 실행합니다. 브레이크포인트에 멈추면 Alt + F9(Run to user code)를 눌러 CreateProcessW를 호출한 곳으로 이동합니다. secinit.exe프로세스 상태를 확인하면 코드 인젝션을 수행하기 위해 일시정지 상태로 되어 있습니다.
※ secinit.exe에 인젝션할 코드를 추출할려고 했지만 알수없는 회피기술이 있어 실패했습니다.
CreateProcessW가 실행된 곳 주소를 보면 gennt.exe의 코드영역에 벗어나 있습니다. 즉 실행 중에 메모리를 할당하고 어떤 데이터를 언패킹한 것으로 생각합니다.
바이러스 토탈에 등록된 백신은 0x00A70000(secinit.exe에 인젝션한 코드)에 있는 데이터를 Graftor악성코드로 의심합니다.
5.2 코볼트 스트라이크를 실행한 스크립트 추출
샌드박스에서 실행되었던 cmd.exe는 알수없는 회피기술로 동적분석에서 발견하지 못했습니다. 하지만 정적분석에서 발견되는 Shellexecute함수가 cmd.exe를 실행했을 거라고 추측됩니다.
cmd.exe가 base64인코딩된 문자열을 실행하면서 코볼트 스트라이크가 실행됩니다. base64인코딩된 문자열은 애니런샌드박스에서 추출할 수 있습니다.
base64디코딩 하면 코볼트 스트라이크를 실행한 파워쉘 스크립트 원본을 얻습니다.
6. 코볼트 스트라이크 분석
코볼트 스트라이크는 공격자 서버의 파일을 다운로드 받습니다. 하지만 현재 공격자 서버가 존재하지 않아 어떤 파일을 다운로드 받는지 분석이 불가능합니다.
6.1 쉘코드 추출
코볼트 스트라이크는 쉘코드로 존재하고 base64디코딩, 커스텀 복호화 알고리즘을 실행해서 얻을 수 있습니다.
[Byte[]]$var_code = [System.Convert]::FromBase64String('base64인코딩 된 쉘코드') for ($x = 0; $x -lt $var_code.Count; $x++) { $var_code[$x] = $var_code[$x] -bxor 35 } ($var_code|ForEach-Object ToString X2) -join ""
6.2쉘코드 분석
jmp2it을 사용해서 쉘코드를 실행했습니다. 디버거는 x32dbg를 사용했습니다.
쉘코드는 IAT가 없으므로 실행 중에 필요한 DLL과 API함수 주소를 찾습니다. DLL이름과 API함수이름은 공격자가 만든 특정 알고리즘을 실행한 결과를 사용합니다.
PEB구조체를 이용하여 dll이름과 API함수정보를 가져옵니다.
API함수 이름을 악성코드가 미리 구현한 알고리즘을 사용해서 특정 값으려 변경하고 [그림 23]에서 push한 값과 일치한지 비교합니다. 같다면 해당 API함수를 실행합니다.
[그림 25]의 jmp eax에 브레이크포인트 조건을 설정하면 쉘코드가 사용하는 API함수 목록을 쉽게 얻을 수 있습니다.
쉘코드가 사용하는 API함수는 [그림 27]과 같습니다.
▶ InternetOpenA
▶ InternetConnectA
▶ HttpOpenRequestA
▶ HttpSendRequestA
▶ ExitProcess
InternectConnectA함수에 브레이크포인트를 설정하면 공격자 서버 주소를 볼 수 있습니다.
Http GET요청을 하지만 현재 공격자 서버가 존재하지 않아 Timeout에러 메세지가 출력됩니다.
7. 참고자료
▶ 분석 보고서: https://newtonpaul.com/analysing-fileless-malware-cobalt-strike-beacon/
▶ secinit.exe 바이러스토탈 링크 : https://www.virustotal.com/gui/file-analysis/ZGNkZDBhOTIzMjFlNjc0OWNmODYyNjRiYTJkNDZlNjI6MTU5NjAxMzM4Mw==/detection
▶ secinit.exe cape 샌드박스 링크: https://capesandbox.com/submit/status/35205/
▶ 파워쉘 스크립트 상세분석: https://sanseolab.tistory.com/77
▶ gennt.exe 바이러스토탈 링크: https://www.virustotal.com/gui/file-analysis/MzAyZTE0YjY5MjIyOWI1MThiYzdjYjVmNWZlMDRhOTg6MTU5NjA5NjMyMg==/detection
'전공영역 공부 기록' 카테고리의 다른 글
비트코인 주소를 복사하면 공격자 주소로 변경하는 악성코드 (4) | 2020.08.04 |
---|---|
추천 안랩 웨비나 - Fileless공격 설명 (0) | 2020.08.04 |
NirSoft 도구를 악용하는 호크아이 악성코드 분석 (2) | 2020.07.30 |
[악성코드 분석 입문] anyrun샌드박스 사용 간단설명서 (0) | 2020.07.28 |
[악성코드 분석 입문] 샌드박스란? (0) | 2020.07.26 |