전체 글 71

Windows I/O Manager

Table of Contents Abstract Windows는 다양한 외부 디바이스와 Windows 시스템 상에서 동작하는 유저 모드 어플리케이션나 운영체제, 외부 디바이스간 원활하고 통일된 통신 방식을 위해 I/O Manager를 통한 I/O 인터페이스를 제공하고 있다. I/O Manager는 유저 모드 어플리케이션이 요청한 I/O를 IRP라는 I/O 요청서로 패키징해 드라이버에게 전달하고, 드라이버는 요청 내용을 적절히 처리해 디바이스로 전달한다. 본 글에서는 이러한 I/O 과정에서 중요한 Windows 커널 요소들을 정리해봤다. Windows I/O Components I/O Manager EDR을 포함해 많은 보안 프로그램들은 파일 시스템에서 발생하는 이벤트들을 모니터링 할 필요가 있다. 파일 ..

Development/Windows 2021.11.19

#5 AMSI - Regsvr32로 AMSI Provider 등록하기

Table of Contents Abstract Regsvr32는 Windows 레지스트리에 DLL을 등록하거나 해제하는 데 사용되는 유틸리티다. Regsvr32는 등록하려는 DLL을 로드한 후 해당 DLL의 DllRegisterServer 함수를 호출함으로써 등록하고, DllUnregisterServer를 호출함으로써 해제한다. 본 글에서는 이러한 Regsvr32를 통해 AMSI Provider를 레지스트리에 등록하는 방법을 서술한다. How to register using regsvr32 Regsvr32 Regsvr32는 Windows 레지스트리에 DLL이나 ActiveX 컨트롤 같은 OLE 컨트롤을 등록하거나 해제하는 커맨드 라인 유틸리티다. Windows XP부터 존재했으며 %systemroot%..

Development/Windows 2021.11.11

#4 AMSI - AMSI Provider 등록하기

Table of Contents Abstract AMSI Provider는 Windows의 레지스트리에 AMSI Provider의 프로필과 AMSI DLL 경로를 저장함으로써 AMSI Provider 로 등록된다. 위치는 아래와 같다. AMSI Provider Registry HKLM\SOFTWARE\Microsoft\AMSI\Providers\{} HKLM\SOFTWARE\Classes\CLSID\{} AMSI Provider WoW64 Registry HKLM\SOFTWARE\WOW6432Node\Microsoft\AMSI\Providers\{} HKLM\SOFTWARE\WOW6432Node\Classes\CLSID\{} How to register DLL as AMSI Provider AMSI Re..

Development/Windows 2021.11.09

#3 AMSI - AMSI Provider 작성하기

Table of Contents Abstract AMSI Provider는 Windows에 AMSI Provider로 등록되어 AMSI Scan 기능을 제공하는 서드 파티 멀웨어 방지 공급자를 말한다. 개요에서 보았듯이 AMSI Scan 기능을 이용하는 AMSI Client들은 AMSI API 함수를 호출하면 자동으로 레지스트리에서 AMSI Provider 관련 키와 값을 찾아 AMSI Provider의 DLL을 로드하고, AMSI DLL의 Scan 함수를 호출한다. 그러므로 AMSI Provider를 만든다는 것은 AMSI Client들이 로드할 DLL을 작성하고 이를 Windows 레지스트리에 등록하는 것을 의미한다. How to develop AMSI Provider Sample Code 우선 Vi..

Development/Windows 2021.11.08

#2 AMSI - AMSI 스캔 기능 사용하기

Table of Contents Abstract AMSI Provider가 제공하는 AMSI Scan 기능을 사용하기 위해서는 Windows SDK에서 제공하는 amsi.h를 인클루드하고 AmsiScanString 혹은 AmsiScanBuffer API를 호출하면 된다. AMSI API가 담긴 amsi.lib는 자동으로 링크되지 않으므로 #pargma 같은 전처리문이나 프로젝트 속성에서 amsi.lib를 포함시켜야 한다. How to use AMSI Scan 앞서 AMSI는 AMSI 스캔 기능을 제공하는 AMSI Provider와 이를 사용하는 일반 응용 프로그램들로 나뉜다고 설명했다. 본 글에서는 AMSI Provider가 제공하는 AMSI 스캔 기능을 사용하는 방법에 대해 적어보려 한다. AMSI 스..

Development/Windows 2021.11.06

#1 AMSI - 개요

Table of Contents Abstract AMSI는 Windows가 서드 파티 AV 프로그램들이 Fileless 악성코드를 탐지하고 차단할 수 있도록 제공하는 스캔 인터페이스다. PowerShell, CScript, WScript 등이 스크립트를 실행하기 전에 AMSI를 사용해 서드 파티 AV 프로그램들에게 스크립트의 악성 여부 검사를 요청할 수 있으며, 서드 파티 AV 프로그램들은 스크립트를 진단해 악성 여부를 판단한 뒤 이를 반환해 스크립트 실행을 차단할 수 있다. 본 AMSI 편에서는 AMSI에 대한 개요와 이용법, 작성법, 등록법을 알아보도록 하겠다. Overview AMSI AMSI(Anti-Malware Scan Interface)는 Windows 10부터 제공하는 다목적 스캔 인터페이..

Development/Windows 2021.11.05

#4 CodeQL - 쿼리 파일 작성해서 실행하기

본 글에서는 codeql에서 제공하는 기본 CodeQL 쿼리 파일이 아닌 우리가 직접 CodeQL 쿼리 파일을 작성해보고 실행시키는 방법을 서술하려 한다. Python을 기준으로 작성되었으나 Non-compiled 언어라면 어떤 언어든 가능하다. 언제쯤 MSBuild를 사용한 C++ CodeQL DB 구축에 성공할 지 모르겠다.. #환경 현재 시스템에 세팅된 CodeQL 설정은 아래와 같다. Working Dir: ~\Documents\CodeQL CodeQL CLI: ~\Documents\CodeQL\codeql-cli (version 2.6.0) CodeQL Lib: ~\Documents\CodeQL\codeql-repo (https://github.com/github/codeql) #테스트용 Pyt..

CodeQL 2021.09.08

ECIES

Table of Contents Abstract ECIES(Elliptic Curve Integrated Encryption Scheme)는 Hybrid Encryption Scheme 중에 하나다. Encryption Scheme이란 쉽게 말해서 데이터를 암호화 해 전송하기 위한 모든 과정을 나타낸 것이다. 예를 들어 임의의 대칭키를 생성하고, 상대의 공개키로 암호화 해 전송한 후, 이를 복호화 해 키 교환 단계를 거치고 서로 합의한 대칭키 암호화 알고리즘을 사용해 데이터를 암호화 해 전송한다. 수신한 데이터의 무결성과 상대에 대한 인증을 위해 해시나 MAC을 곁들일 수도 있다. 이처럼 다양한 암호화 기능을 언제 어떻게 적용할 것인가를 규정한 것이 Encryption Scheme이다. ECIES ECI..

Cryptography 2021.08.24

#7 PE - Rich 헤더

Abstract Rich 헤더는 PE 파일의 DOS 스텁 코드와 NT 헤더 사이 사용되지 않는 공간에 저장되는 데이터다. 실행에 영향을 주지 않으며 프로그램이 빌드된 환경에 대한 정보가 저장되기 때문에 사이버 위협 인텔리전스에서 활용되고 있다. 하지만 변조가 쉽기 때문에 신뢰하기보다는 참고용으로 사용하는 경우가 많다. 실제로 Rich 헤더를 변조해 다른 그룹의 악성코드로 위장한 경우도 있다. Rich Header 아래 그림에서 붉은 박스로 감싸진 영역이 Rich 헤더다. Rich 헤더 영역에서 푸른 박스로 감싸진 영역은 Rich 헤더의 시그니처, 초록색 박스로 감싸진 영역은 Rich 헤더의 체크섬이자 XOR 키이다. Rich 헤더의 데이터들은 Rich 헤더의 체크섬으로 XOR되어 저장된다. 단 Rich ..

Malware Analysis/PE 2021.08.01

#6 PE - .reloc 섹션

Abstract Windows는 보안을 위해 ASLR 기능을 지원한다. 물론 이외에도 DLL의 재배치 기능을 위해서 실행 파일을 가상 메모리 내 임의의 위치에 로드될 필요가 있다. .reloc 섹션은 이러한 재배치 기능을 위해 만들어진 섹션으로, OptionalHeader에 명시된 ImageBase가 아닌 다른 ImageBase에 PE 실행 파일이 로드될 때 참조 주소 값들을 새 ImageBase를 기준으로 다시 계산해 적용하기 위해 존재한다. .reloc Section .reloc .reloc 섹션은 PE 파일이 메모리에 로드될 때 Optional 헤더의 ImageBase 값이 아닌 다른 위치에 로드될 경우 문자열 주소나 IAT 영역 위치 등의 주소를 재배치된 ImageBase에 맞게 고치기 위한 섹션..

Malware Analysis/PE 2021.08.01