0x00. 서론
타사의 Code Sign 된 인증서를 적용하는데 있어서, 문제가 될 수 있다는 이슈가 발생되어 해당 이슈를 분석한 내용을 정리하였다.
0x01. 본론
0x01-1. Code Sign 이란?
Code Sign은 실행파일의 신뢰성을 보증하기 위하여, 인증기관에서 인증한 인증서를 기반으로 파일의 무결성을 유지하는 하나의 보증 기능이다. 이 인증서는 공인인증서와 같은 구조로 되어 있어 서명된 파일에 대한 정보를 CA 기관에 요청하여 안전한 업체인지를 판단 하는 기준이 된다.
0x01-2. Code Sign 은 어디에?
Code Sign은 PE 구조체의 IMAGE_NT_HEADERS -> IMAGE_OPTIONAL_HEADER의 내용을 참조한다.
Code Sign에 사용되는 변수 및 구조체는 아래와 같다.
- CheckSum
- CERTIFICATE Table
0x01-3. 타사의 제품 악용하기
서명되지 않은 상태의 프로그램에 타사의 인증서를 적용하는 방법은 Hex Editor를 이용하여, 해당 구조체 내역에 주소와 사이즈를 강제로 넣으면 된다.
이와 같이 HexEditor로 만 수정해서 적용이 가능하다.
0x01-4. 검사 방법은?
1. 위에서 보는 것과 같이 자세히 버튼을 통하여 보게 되면 해당 인증서로 정상적으로 인증한 파일인지가 확인이 가능하다.
2. 다음 함수를 통하여, 확인이 가능하다.
- WinVerifyTrust(HWND hWnd, GUID *pgActionID, LPVOID pWVTData)
http://msdn.microsoft.com/en-us/library/windows/desktop/aa388208(v=vs.85).aspx
단, 해당 함수는 인터넷이 연결된 상태에서 사용해야지 검증이 가능하며 검증 과정은 1분 정도 소요 된다.
0x02. 결론
파일에 대한 인증서를 추출하는건 어렵지 않다. 하지만 해당 파일에 추출된 인증서를 사용하는데 있어서는 제약이 있으므로 어느 정도(?) 안전하다고 볼 수 있다.
그러나, 인증서가 추출이 가능하다는 것은 공격할 수 있는 포인트가 생성되는 것이므로 해당 이슈에 대한 지속적인 방어적 내용 및 대응책을 모색해 볼 필요가 있다.
※ 참고 사이트
WinVerifyTrust function
http://msdn.microsoft.com/en-us/library/windows/desktop/aa388208(v=vs.85).aspx
CertFindCTLINStore function
http://msdn.microsoft.com/en-us/library/windows/desktop/aa376067(v=vs.85).aspx
Example C Program: Verifying the Signature of a PE File
http://msdn.microsoft.com/en-us/library/windows/desktop/aa382384(v=vs.85).aspx
Verifying a CTL
http://msdn.microsoft.com/en-us/library/windows/desktop/aa388188(v=vs.85).aspx
SigCheck v.1.71
http://technet.microsoft.com/en-us/sysinternals/bb897441
'Reverse > PE 관련' 카테고리의 다른 글
PE 분석에 활용하는 툴 소개 (0) | 2012.05.31 |
---|