티스토리 뷰
[개요]
언론[3]에 따르면 한국수력원자력에서 상반기 채용공고인 "연구ㆍ전문원 및 경력사원 선발[2]"을 미끼로 사용하여 공격자들은 금일 악성 한글파일을 유포한 정황이 포착됐습니다. (Figure 1) 4월 27일 오후 6시경 확인했을 때는 ViRobot을 제외하고는 탐지를 못하는 것을 확인했습니다. 본 게시물에서 다루는 샘플은 이전 게시물[1]과 GhostScript 취약점(CVE-2017-8291) 및 쉘코드 또한 유사했습니다. C2 서버에서 파일을 받지 못하여 추가적인 분석은 하지 못했지만 유포 전 과정까지 분석한 결과를 본 게시물에서 소개해드리겠습니다.
공격자는 실제 한국수력원자력 상반기 2020 채용공고 문서(Figure 2)와 유사하게 작성(Figure 3)을 했으며, 일부 내용은 조금 다른 것을 확인했습니다. 한수원은 2014년 특정 공격그룹(언론은 라자루스라고 칭함)에 의해 공격을 당한 이력이 있었기 때문에 해당 공격이 화제가 되었던 것 같습니다.
[Hash값 채증]
(Figure 4)는 순서대로 유포된 악성 한글 문서, PostScript, 은닉된 shellcode 순으로 이루어집니다.
[악성 문서파일(HWP) 및 쉘코드 분석]
(Figure 5) 한글 속성정보를 확인한 결과, 마지막 작성된 시각은 2020년 4월 26일 21시 49분경에 작성된 것으로 확인됩니다.
(Figure 6)~(Figure 8) 은닉된 PostScript 코드를 확인해본 결과, /tomato라는 변수로 PostScript가 또 다시 존재했으며, 이를 다시 확인한 결과, 실제 쉘코드가 (Figure 8)과 같이 존재했습니다.
(Figure 8)의 쉘코드를 채증해 텍스트로 확인한 결과, 저번 분석(Powershell 이용)과 비슷하게 VBScript를 활용합니다. 또한, C2로 예상되는 주소가 xURLS 변수에 선언되어 있는 것을 볼 수 있습니다.
쉘코드를 분석한 결과, 아래와 같은 단계로 이루어집니다.
1. GetProcAddress를 이용해 LoadLibrary API 함수 호출
2. msvcrt.dll 호출
3. GetProcAddress를 이용해 system API 함수 호출
4. system API 호출을 통해 VBScript 코드 호출
참고로, (Figure 10) 0x4010A4 주소의 CALL 0040163F는 system API 함수를 호출하는 함수입니다. 바로 밑의 0x4010A9 주소는 VBScript가 작성된 것으로, system 함수의 인자 값으로 동작됩니다.
→ CALL을 진입하면 다음 주소(Return)를 스택에 쌓는 것을 토대로 만들어짐(System 함수의 인자로 동작)
(Figure 11) ~ (Figure 12)는 (Figure 10)에서 발견된 VBScript를 채증해서 재표현한 코드입니다. (Figure 11)은 파라미터로 들어온 값을 Base64 디코딩하는 Base64Decode 함수, Binary를 String형으로 변경하는 BinaryToString 함수가 있습니다.
(Figure 12)를 요약하면 아래와 같은 기능이 있습니다.
1. 인터넷 연결을 위한 Microsoft.XMLHTTP, 윈도우 기능을 사용하기 위한 WScript.Shell 객체를 생성
2. OS 환경을 체크하고 64비트가 아니면 종료
3. xURLS 변수에 아래 C2 정보에 GET 메소드를 통해 리소스를 요청 시도
(C2) https://matteoragazzini[.]it/wp-content/uploads/2017/06/category.php?uid=1&udx=cbedf01fa62a94219e70dae13d3dc984
4. 3번에서 리소스를 받아왔다면, Base64Decode 함수에 받은 HEX 데이터를 BinaryToString 함수로 String 형태로 변환한 뒤 Base64 디코딩 수행 (여기서 알 수 있는 점은 받는 리소스는 Base64 인코딩된 HEX형 데이터일 가능성 농후)
5. 디코딩된 데이터를 svchost.exe 이름으로 저장하고 실행하며, 해당 VBScript를 자가삭제하고 종료
C2에 접속해 추가 바이너리를 채증하려고 시도한 결과, 리소스가 없는 상태로 추가 분석을 할 수 없었습니다. 이후에 유포파일을 얻을 수 있다면, 분석 후 내용을 추가하도록 하겠습니다.
특이사항으로, (Figure 12)에서 C2에 GET 요청을 할 때, category.php에 uid, udx 파라미터를 사용합니다. 여기서 udx는 32자리인 md5 형태의 숫자로 이루어져 있습니다. 혹시 md5라면 Virustotal에 업로드가 되지 않았을까 하는 생각에 확인한 결과, 파일은 아직 업로드되지 않았습니다.
[결론]
본 게시물에서는 한국수력원자력 채용공고를 미끼문서로 만든 악성 한글문서를 분석했습니다. 추가 유포파일을 채증하지 못해 추가적인 분석은 하지 못했지만, 해당 게시물에서 알 수 있는 점은 한글 취약점(CVE-2017-8291)을 이용했고, 최종적으로는 쉘코드 내부 VBScript를 이용해 C2 주소에서 추가 유포파일을 다운로드 시도하는 다운로더(Downloader)였습니다.
추가적으로 작성한 글(https://suspected.tistory.com/269)의 분석 내용과 유사한 점이 있습니다.
※ TTP가 유사
→ 스피어피싱을 이용해 한글문서를 유포 및 2차 악성코드 다운로드 시도
→ 유포지로 사용한 C2 주소를 취약한 워드프레스 사이트로 사용
→ 유포파일을 %temp% 경로에 svchost.exe를 다운로드 후 실행
※ 달라진 점
→ [1]이전에는 Powershell을 이용해 C2에 접속했지만, 이번 공격은 VBScript만을 이용
[IOC]
- https://matteoragazzini[.]it/wp-content/uploads/2017/06/category.php?uid=1&udx=cbedf01fa62a94219e70dae13d3dc984
- 67a52dbb1067cc4546bb738cc5a77a4bc9ed4e4f5d0febdc4fc0b5427b5d35f9
- 66a4eb6f99e942a6ba326de64fd893a5e18f6812dda224873ba94382cc00b3ed
- c9caac0541347aef876e1147d7df2a752cd5d08c94e2d9760f15b39ba23bb0fa
- eff551790f6a1c395898ef2a3a2aea61daf478ecc5814e93a150aa0bd426f4e4
[Reference]
[1] https://suspected.tistory.com/269
[2] http://www.khnp.co.kr/RECU_NEW/
[3] https://m.etnews.com/20200427000455
'리버싱 > 윈도우 악성코드 분석' 카테고리의 다른 글
악성코드 분석(암호화폐 거래소(플라이빗-Flybit) 타겟 스피어피싱 공격) (0) | 2020.04.29 |
---|---|
악성코드 분석("[조회]비트코인 투자 카페 강퇴&활동정지" 악성 한글문서) (0) | 2020.04.29 |
[위협정보 공유] 21대 국회의원 선거관련.docx (0) | 2020.04.10 |
악성코드 분석(전라남도 코로나바이러스 대응 긴급 조회.hwp) (0) | 2020.04.09 |
[SNSLocker] 랜섬웨어 샘플 분석보고서 by suspect (3) | 2016.07.15 |
- Total
- Today
- Yesterday
- MS-Office
- Decoding
- 스피어피싱
- Cisco Talos
- infostealer
- VirusBulletin
- idapython
- vuln
- 위협정보공유
- Static Analysis Engine
- 악성코드
- keylogger
- 비트코인
- 해킹메일
- us-cert
- .wll
- AMSI
- Yara
- Flybits
- Kimsuky
- koodous
- cuckoo-sandbox
- CVE-2018-0798
- 멋쟁이사자처럼 4기
- Servey
- malware
- 한글악성코드
- Bisonal
- 출처 : Do it 안드로이드 프로그래밍
- CVE-2018-9375
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |