목록KISA 사이버 보안 훈련 (60)
작은 메모장
Intel IA32 Processor Register set 인텔의 32비트 마이크로프로세서에서 사용하는 명령 집합 아키텍처의 레지스터 셋 처음에는 8개의 일반 레지스터와 8개의 실수 레지스터를 지원했으나, 시간이 지나며 다양한 레지스터를 지원 범용 레지스터 산술/논리 연산에 사용되는 피연산자 정보, 주소 계산을 위한 피연산자 정보, 메모리 포인터 정보를 담고 있는 레지스터 EAX 덧셈 혹은 뺄셈 같은 연산의 결과를 저장 EBX ESI, EDI 레지스터와 결합하여 메모리 주소를 저장 ECX 문자열 및 반복실행 포인터 EDX I/O 포인터 ESI 데이터를 조작하거나 복사시, 소스 데이터의 주소를 저장 EDI 데이터를 조작하거나 복사시, 목적지 데이터의 주소를 저장 EBP 스택에 있는 데이터의 포인터 ESP..
PE(Portable Executable)의 기본구조 - 윈도우 운영체제에서 사용되는 EXE, DLL, SYS등의 확장자를 가진 파일 - 동적 라이브러리 정보, API 익스포트 및 임포트 정보, 실행을 위한 코드, 실행에 필요한 리소스 정보 등을 구조화 및 관리하는 방법을 정의 - 실행 과정에서 로더에 의해 가상 메모리 공간에 매핑된 후에도 파일의 레이아웃은 거이 바뀌지 않음 PE 파일은 크게 DOS헤더, PE 헤더, 섹션으로 구성되며, 각각의 공간은 서로 다른 정보를 담고 있음 DOS Header 1) DOS Header - MS-DOS 파일에 대한 호환성을 유지하기 위해 존재, "MZ"로 시작 - 구조체 : IMAGE_DOS_HEADER - 주요 멤버 e_magic: DOS signature로, PE..
가상 주소 공간을 실제 눈으로 확인해보자 xdbg 프로그램을 이용하여 가상주소 공간을 실제로 확인해볼 것임 이건 윈도우 기본 프로그램 중 계산기 프로그램을 디버거로 연 것으로, 여러가지 내용이 담겨 있는 것을 볼 수 있음 조금 더 명확한 확인을 위해, processexplorer프로그램으로 프로세스간 부모-자식 관계를 살펴봄 프로그램을 실행시키면, x64dbg 프로세스 아래에 calc, 계산기 프로그램이 존재하고 있음을 확인 가능 다시 x64dbg를 실행시키면, 상단에 메모리 맵(Memory Map)이라는 탭이 보임 메모리 맵은 로드된 프로그램 이미지의 주소와 DLL 파일이 로드된 주소, 권한 등을 확인할 수 있는 가상 메모리 공간 어떤 주소에 스택이 존재하고, 경로가 위치해있으며, 시작 부분 주소가 어..
가상주소공간(Virtual Address Space) 가상주소는 물리메모리와는 다른 가상의 메모리 공간을 논리적으로 구현한 것으로, 프로세스의 실행파일 및 데이터를 저장하는 용도로 사용 프로세스는 가상 주소를 사용하고, 데이터를 사용(읽기/쓰기) 할 때는 물리 주소로 변환하여 사용 즉, 이 VAS를 사용하기 위해선 가상 주소(Virual Address)와 물리 주소(Physical Address)가 필요 이게 왜 필요한가? 프로세스는 큰것부터 작은것까지 용량이 다양함 용량이 큰 프로세스를 메모리에 그대로 올리게 되면, 메모리 용량에 큰 부담이 됨 문제는 메모리에 다른 프로세스까지 같이 존재하고, 동작한다는 것 즉, 한정된 메모리에서 여러 프로세스를 실행시킬 수 있도록 메모리 구조를 구성하는가?의 해답으로..
PE파일의 생성 및 실행 - 윈도우의 실행파일은 소스코드 파일, 오브젝트 파일, 실행파일(PE) 순으로 빌딩됨 이 과정에서 컴파일러(Compiler)와 링커(Linker)가 관여 - 컴파일 단계에서 컴파일러의 주요 기능은 소스코드를 아키텍처에 맞는 기계어 코드로 변환하는 것 - 실행파일이 실행되면, ntdll.dll 모듈에 정의되어 있는 로더 함수들에 의해 메모리에 매핑됨 이 과정에서 메모리에 대한 권한(Read, Write, Execute)부여, 사용하는 API에 대한 주소값을 조사(바인딩)하는 작업이 수행 더욱 쉽게 이야기를 해보자... 하나의 프로젝트가 A.c B.c C.c라는 3개의 C코드로 구성되어 있고, 이를 빌드해 실행파일을 만드는 상황을 가정 먼저 컴파일러가 컴파일을 통해 소스코드 파일을 ..
조건이 꽤 까다로운 문제 사용할 IOC 정보를 잘 골라야 해결할 수 있는 문제 첫번째로, 탐지대상과 미포함대상의 특징부터 확인 탐지 대상 미포함 대상 파일 명 64자리 대문자 16진수 64자리 대문자 16진수 파일 사이즈 118KB ~ 562KB 1KB ~ 284KB 유형 응용 프로그램 응용 프로그램 위 표는 각 대상 파일들의 특징을 정리한 것 두 대상은 육안으로 파악할 수 있는 정보로는 겹치는 정보가 많음 IOC로 넣기에 부적합 CFF Explorer로 탐지 대상 파일의 IOC 후보를 추출 여러 파일을 조사한 결과, File Type, File Info, InternalName이 대다수 겹치는 것을 확인 이를 IOC로 지정 첫 번째 IOC인 Portable Executable 32를 탐지하기 위해 32..
기초적인 Yara Rule부터 작성 만들긴 했는데 이 난해한 조건을 어떻게 표현해야할 지 뚜렷히 감이 잡히지 않음 즉, 표현 방법을 몰라 Yara Rule 작성 불가 이 때 Yara Document 페이지를 이용 Yara의 사용법이 담긴 백과사전 GUI 형태를 감지하는 Yara를 찾고 싶으니, GUI를 검색하고 PE 모듈이 써있는 것을 클릭 사용법을 획득, 이를 토대로 Yara Rule 작성 GUI 감지하는 Rule 추가 완료 이제 시간 정보를 탐지하는 Rule을 검색 timestamp는 epoch 시간으로 인식하는 조건을 가짐 이를 위해 Epoch Converter에 접속 여기서 2015/1/1/00:00:00 ~ 2017/12/31/11:59:59를 검색 Epoch값을 획득하였음 이를 Yara Rul..
모듈 사용을 위한 실습을 진행 저번과 같이 실습은 미리 마련된 악성 파일셋을 제공받아 진행 첫 번째 문제 특정 해시 값을 물어보는 문제 파일의 이름은 일반적인 유니코드 데이터로 이루어져 있기 때문에 이를 해시로 변환 파일 시작부터 끝까지 파라미터로 넣은 후 동일한 해시값이 존재하면 탐지하는 방식 하나의 파일이 탐지 됨 두 번째 문제 악성 파일과 동일한 라이브러리와 함수를 사용하는 악성파일을 탐지하는 문제 타겟이 되는 악성 파일의 해시값을 모르므로, console모듈과 pe 모듈을 사용하여 이를 탐지 파일의 MD5 해시값을 획득 이를 다시 Yara Rule에 적용 7개의 파일이 검출된 것을 확인 가능 세 번째 문제 특정 EntryPoint로 UPX 패킹을 한 파일을 찾는 문제 일단 Entry Point부터..