제로데이 취약점을 찾는 것은 말할 필요도 없이 중요하고 멋진 일이다.

하지만 때때로 제로데이 취약점을 찾는 것만큼 필요하고 의미 있는 일이 패치가 발표된 원데이 취약점의 POC를 구현하는 일이다.

이번 글에서는 이런 원데이 취약점 중 공개된 정보가 적을 때 패치 된 취약점이 무엇이었는지 찾고  POC를 구현하는 방법에 대해 적어보려고한다. 


따라서 이 글은 CVE-2017-8464 LNK취약점을 다루기는 하지만 취약점에 대한 내용보다는 정보가 없는 원데이 취약점을 어떻게 구현해 나가는 지에 중점을 두고있다.


1. 공개된 취약점 정보 확인하기

링크 : https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-8464


위 그림은 마이크로소프트 사의 MSRC페이지에서 확인한 CVE-2017-8464정보이다.  CVE-2017-8464 취약점은 윈도우즈의 링크파일(.LNK)를 이용해 RCE가 가능한 취약점이라고 설명되어있다. 공격자가 피해자에게 악의적으로 조작된 링크파일 바이너리를 전달하면 피해자가 해당 파일이 있는 폴더를 열기만해도 공격코드가 실행되는 취약점이다.

(현재 기점으로 2년이나 된 취약점이기 때문에 MSRC외에도 exploit-db라던가, github에 공개된 POC들이 많지만 글의 목적에 따라 다른 정보가 없다고 가정한다.)


취약점 설명 아래에는 해당 취약점을 패치하기위한 파일들을 볼 수 있다.


패치파일에는 해당 취약점을 보완하기위한 파일도 있지만 기타 다른 취약점 패치라던가, 기능패치라던가 많은 것들이 같이 포함되어있기 때문에 어떤 파일을 패치 했는지 찾는 것이 중요하다.


취약점 관련 파일을 찾는 범위를 좁히기위해 Security Update 패치파일을 다운받는다. 분석환경 OS에 맞는 파일을 찾으면되고, 참고로 64bit보다는 32bit환경을 택하는 것이 더 수월하다. 



여기서는 Windows 7 for 32-bit Systems Service Pack 1 의 Security Only 링크를 클릭했고, 목록 중 두번째 파일을 다운받았다.

다운받은 파일은 .msu확장자를 갖는 패치 파일인데, 압축해제가 가능하다. 압축해제를 하면 .cab파일을 얻을 수 있다.




cab파일 역시 많은 패치파일을 포함하고있는 일종의 압축파일인데, 이 파일은 윈도우 명령어 expand로 압축해제할 수 있다.
ex) expand [cab file] -f:[추출 파일명] [경로]

- expand Windows6.1-KB4022722-x86.cab -f:* .



cab를 풀고나면 보다시피 엄청나게 많은 파일이 있다. 이 중에 취약점과 관련된 파일을 선별해내야한다ㅠㅠ

선별하기전에 해야하는 선행할 작업이 하나 더 있는데, 해당 패치 적용 직전의 버전으로 윈도우즈의 버전을 올려야한다. 이 과정을 통해 패치 비교의 범위를 줄인다.


취약점이 패치 된 파일을 찾기 위해 현재 explorer.exe에 로드된 dll(LNK파일은 explorer.exe에서 핸들링 되므로)과 패치 파일목록에 있는 dll을 매치시키는 파이썬 스크립트를 작성했고 실행한 결과 범위를 많이 줄일 수 있었다. 아래는 스크립트 중 일부이다.



위 그림은 스크립트 실행 결과중 일부인데, LNK파일을 핸들링하는 dll인 shell32.dll이 있었다. 그리고 2010년, 2015년도에 발생한 링크파일 취약점도 shell32.dll에서 발생했었기 때문에 2017취약점도 shell32.dll에서 발생했을 것이라 예상해 볼 수있다.


'Study > Windows' 카테고리의 다른 글

Windows Hooking(Frida)  (5) 2018.01.30

+ Recent posts