분류 전체보기 71

#5 PE - IAT

Abstract IAT는 PE 프로그램이 사용할 외부 라이브러리(DLL 등)의 파일명과 해당 외부 라이브러리에서 가져올 함수의 이름을 명시하는 영역이다. 파일에서의 IAT 영역은 외부 라이브러리 파일명과 함수의 이름을 가리키는 오프셋 값이 들어있지만, PE 로더에 의해 메모리로 로드된 후에는 외부 라이브러리의 가상 메모리 영역에 존재하는 함수의 시작 주소 값으로 변환된다. Import Address Table Overview IAT는 Import Address Table로 PE 파일이 사용하는 외부 API 함수의 주소들을 배열 형태로 저장해놓는 영역을 의미한다. IAT의 위치는 Optional 헤더의 DataDirectory 배열중 13번째 원소(DataDirectory[12])에 저장되어 있다. Dat..

Malware Analysis/PE 2021.08.01

#4 PE - Section Header

Abstract PE 포맷에서 Section이란 비슷한 데이터들을 모아놓은 공간을 의미한다. 주요 섹션으로는 실행 코드들이 저장되는 .text섹션과, 문자열 등이 저장되는 .data 섹션, 읽기만 가능한 데이터가 저장되는 .rdata 등이 있다. 각 섹션 헤더들은 섹션 데이터의 파일 내에서의 위치와 크기, 메모리에서의 위치와 크기를 명시하고 있으며, PE 로더는 이를 보고 각 섹션 데이터를 적절한 가상 메모리 영역에 로드한다. Section Header IMAGE_SECTION_HEADER structure 섹션은 비슷한 성질의 데이터들을 서로서로 모아놓은 것이다. 비유하자면 옷장에 반팔티, 반바지, 긴팔, 긴바지, 외투 등을 서로 다른 칸에 넣어둔 것과 비슷하다. 이렇게 되면 반바지만 모아놓은 칸은 반..

Malware Analysis/PE 2021.08.01

#3 PE - Optional Header

Abstract PE 포맷의 OptionalHeader에는 프로그램 실행의 시작 지점인 Entry Point를 비롯해 다양한 부가 정보를 가진다. Optional Header IMAGE_OPTIONAL_HEADER structure Optional 헤더는 PE 파일이 메모리에 올라갈 위치인 Image Base와 IAT 등의 위치를 기록한 Data Direcotry 등이 있다. 32비트 프로그램에서 winnt.h에 정의된 Optional 헤더는 아래와 같다. // // Optional header format. // typedef struct _IMAGE_OPTIONAL_HEADER { // // Standard fields. // WORD Magic; BYTE MajorLinkerVersion; BYTE..

Malware Analysis/PE 2021.08.01

#2 PE - File Header

Abstract PE 포맷의 DOS 헤더의 e_lfanew 멤버가 File Header의 위치를 가리킨다. File Header에는 PE 파일이 실행될 수 있는 머신(32/64 비트) 종류를 포함해 OptionalHeader의 크기, 섹션 개수, PE 파일 속성 등을 포함한다. File Header IMAGE_FILE_HEADER structure PE 헤더에서 File 헤더는 파일의 개략적인 속성을 나타낸다. PE32 파일인지 PE32+(64비트 프로그램)인지도 File 헤더를 통해 알 수 있다. File 헤더는 DOS 헤더가 e_lfanew 멤버를 통해 가리키던 NT 헤더의 멤버로 포함되어 있다. winnt.h를 통해 IMAGE_NT_HEADERS 구조체를 살펴보면 아래와 같다. typedef str..

Malware Analysis/PE 2021.08.01

#1 PE - DOS Header

Abstract PE는 Windows에서 사용하는 실행 파일 포맷이다. 실행 파일을 실행하기 위한 다양한 속성 값을 가지고 있어, 리버스 엔지니어링에 있어서 잘 알아둬야 할 파일 구조이다. 본 PE 편에서는 아래 항목들에 대해 서술하고자 한다. DOS Header File Header Optional Header Section Header IAT .reloc Section Rich Header DOS Header IMAGE_DOS_HEADER structure PE 파일의 DOS 헤더는 DOS 파일에 대한 하위 호환성을 고려해 만들어졌다. 때문에 PE 헤더의 가장 앞 부분에는 IMAGE_DOS_HEADER 구조체가 나타난다. IMAGE_DOS_HEADER는 'MZ' 라는 매직넘버로 시작하며 NT 헤더의 ..

Malware Analysis/PE 2021.07.31

#2 CodeQL - CodeQL CLI 구성

CodeQL CLI는 CodeQL DB를 만들고 DB에 쿼리하는 Command Line 프로그램이다. VS Code의 확장기능(Extension)으로도 사용가능하다. CodeQL CLI는 아래와 같은 명령 구조를 가진다. codeql [command] [subcommand] #CodeQL CLI 다운로드 우선 CodeQL CLI 프로그램을 다운로드 해야한다. CodeQL CLI는 github 계정의 codeql-cli-binaries 레포지토리에서 공개하고 있다. https://github.com/github/codeql-cli-binaries/releases 본인 운영체제에 맞는 버전을 다운로드한 후 적당한 위치에 압축을 푼다. 본 서에서는 ~/Documents/CodeQL/codeql-cli에 압축을..

CodeQL 2021.07.28

#3 CodeQL - 기본 제공 Javascript QL 사용하기

Abstract 본 글은 GeekMasher라는 분이 작성한 CodeQL 소개글에 나온 Javascript CodeQL 스캔 방법을 따라한 게시글이다. Javascript는 Non-Compiled 언어이기 때문에 데이터베이스 구축이 쉽다(아직 C/C++ CodeQL 데이터베이스 구축을 성공하지 못했다...). How to use JS CodeQL example query 현재 시스템에 세팅된 CodeQL 설정은 아래와 같다. Working Dir: ~\Documents\CodeQL CodeQL CLI: ~\Documents\CodeQL\codeql-cli CodeQL Lib: ~\Documents\CodeQL\codeql-repo (https://github.com/github/codeql) Create..

CodeQL 2021.06.22

#1 CodeQL - Hello, CodeQL

Abstract CodeQL은 LGTM이 개발한 코드 스캐닝 도구다. 소스코드를 대상으로 데이터베이스를 구축하고 해당 데이터베이스에 쿼리하는 형태로 구성되며, 변수나 함수, 클래스 선언부는 물론 변수에 할당된 값의 흐름까지도 추적할 수 있다. CodeQL은 github계정의 codeql 레포지토리에 공개되어있다. https://github.com/github/codeql Hello, CodeQL CodeQL을 개발한 LGTM 사이트에서 CodeQL 쿼리를 직접 실행할 수 있는 웹 쿼리 콘솔을 제공한다. 깃허브에 업로드한 자신의 프로젝트나 공개된 다른 사람의 깃허브 프로젝트를 대상으로 CodeQL을 실행할 수 있다. 프로젝트 하나 뿐만 아니라 여러 개의 프로젝트를 대상으로도 가능하다. 본 글에서는 깃허브에..

CodeQL 2021.06.12

#3 Best of the Best 9기 수료 후기 - 교육&수료

#0 Best of the Best 9기 수료 후기 - 활동경험 #1 Best of the Best 9기 수료 후기 - 자기소개서 #2 Best of the Best 9기 수료 후기 - 시험&면접 2020년 6월 24일 BoB 9기 최종합격자가 발표됐다. 정보보호병 합격했을 때보다 더 기뻤던 것 같다. BoB 생활과 관련한 얘기는 길길 멘토님 글도 참고하면 좋다. #BoB 노트북 150만원 상당의 노트북으로 LG그램이 지급됐다. 개인적으로 BoB 수업듣고 과제하는데 전혀 부족함 없었다. 게임을 하는 것도 아니고, 이보다 안 좋은 노트북을 오랫동안 썼던 탓인지 BoB에서 주는 노트북만으로도 충분했다. 램 부족하다고 8기가나 16기가 더 추가하는 사람도 많았다. OS: Windows 10 Pro 64비트 모..

#2 Best of the Best 9기 수료 후기 - 시험&면접

#0 Best of the Best 9기 수료 후기 - 활동경험 #1 Best of the Best 9기 수료 후기 - 자기소개서 서류를 합격하고 나면 인적성 검사 -> 필기시험 -> 면접을 보게 된다. #인적성 검사 그냥 흔히 아는 인적성 검사랑 동일하다. #필기시험 9기는 코로나 사태로 인해 온라인 시험으로 필기시험을 진행했다. 컨설팅과 제품개발은 단답식, 주관식, 서술형 문제를, 취약점 분석은 CTF 형식이었다. 포렌식은 보고서를 작성해 제출하는 방식이었는데 시험 시간이 11시간으로 다른 트랙들에 비해 압도적이었다. 타 트랙 9기 교육생들이랑 얘기하다 이 주제 나오면 다들 포렌식 트랙 필기 시험 시간 잘못 나온 줄 알았다고 하는데 포렌식 트랙 교육생들도 잘못 나온 줄 알고 눈 씻고 다시 보곤 했다...