짤막한 이야기
-
[2022/04/04][짤막한 이야기 - 악성코드 탐지]짤막한 이야기 2022. 4. 4. 14:59
[2022/04/04][짤막한 이야기 - 악성코드 탐지] “악성코드 탐지(Malware Detection)”는 특정한 프로그램이 악성코드인지 아닌지 판단하는 분야이며, 매우 중요한 한편 아직도 연구할 거리가 많은 분야이다. 보통 악성코드 탐지는 안티바이러스(Anti-Virus) 소프트웨어에서 수행하는 것으로 알려져있다. 악성코드 탐지를 위한 방법은 다양하지만, 대표적으로 많이 활용되는 방법은 두 가지이다. “시그니처 기반 탐지(Signature-based Detection)”와 “행위 기반 탐지(Behavior-based Detection)”의 두 가지이다. 시그니처 기반 탐지는 탐지 대상인 프로그램 내부에 특정한 바이트열(Byte Sequence)이 존재하는지 확인하는 것이다. 이 때 존재를 확인해야하..
-
[2022/03/24][짤막한 이야기 - 직접분기문&간접분기문]짤막한 이야기 2022. 3. 24. 19:53
[2022/03/24][짤막한 이야기 - 직접분기문&간접분기문] “분기문(Branch Statement)”은 대상이 되는 주소로 제어권을 이동하는 어셈블리어를 의미한다. 이와 유사한(하지만 같지는 않은) 개념으로는 “호출문(Call Statement)”도 있다. 이 또한 대상이 되는 주소로 제어권을 이동하는 어셈블리어이다. 흔히 잘 아는 분기문은 “jmp”와 같은 옵코드로 구성되고 호출문은 “call”과 같은 옵코드로 구성이 된다. 그런데 프로그램 자체가 파일 상태에서 이미지 상태로 변환될 때, 즉, 하드디스크에서 메모리 상으로 적재될 때(=실행이 될 때)에는 그 적재 시작위치가 간간히 바뀔 수 있다고 하였다. 그리고 특정한 라이브러리(DLL)로부터 API를 사용하는 경우 해당 라이브러리도 메모리 상에서..
-
[2022/03/22][짤막한 이야기 - 재동기화]짤막한 이야기 2022. 3. 22. 13:51
[2022/03/22][짤막한 이야기 - 재동기화] 이번에 포스트할 내용은 어셈블리어나 디버깅에 익숙하지 않으면 생소할 수 있는 “재동기화(Resynchronization)”에 관한 내용이다. 재동기화는 x86 어셈블리어에서 쉽게 관찰되는 특징으로, 이 특징이 있기 때문에 바이트 변형에 어느 정도는 내성을 가진다고 볼 수 있다. 그림의 위 화면은 AbexCrackMe#1이라는 프로그램을 디버거로 분석하는 화면이다. 그림의 아래 화면은 이 AbexCrackMe#1의 첫번째 바이트를 0x6A에서 0x6B로 1을 더하였을 때 발생하는 현상이다. 위 화면에서는 첫 번째 줄에 “0x6A 0x00”의 2개 바이트를 합쳐서 “push 0”라는 명령어로 디스어셈블 되었다. 그런데 아래 화면에서는 첫 번째 줄에 “0x6..
-
[2022/03/18][짤막한 이야기 - 예외 기반 분석방지 기술(SingleStep)]짤막한 이야기 2022. 3. 21. 16:04
[2022/03/18][짤막한 이야기 - 예외 기반 분석방지 기술(SingleStep)] “SingleStep(싱글스텝)”은 예외를 발생시키는 방법 중 하나이다. 싱글스텝은 트랩플래그(TrapFlag, TF)에 의하여 실행될 수 있는 하나의 “모드”이다. 흔히 알려진 플래그로는 제로플래그(ZeroFlag, ZF)가 있는데, 이런 플래그는 1비트(0[False] 혹은 1[True])로 토글(Toggle)되는 성질을 가지고 있다. 트랩플래그와 제로플래그 등의 플래그는 모두 EFLAGS라는 레지스터에 포함되는 플래그 값이다. 트랩플래그의 값이 1[True]로 셋팅되어 있으면 CPU가 싱글스텝 모드에 진입하게 된다. 이 싱글스텝 모드는 간단히 말하면 예외가 발생하게되는 상태이고, 엄밀히 말하면 어셈블리어 하나를..
-
[2022/03/18][짤막한 이야기 - 예외 기반 분석방지 기술(예시)]짤막한 이야기 2022. 3. 18. 11:16
[2022/03/18][짤막한 이야기 - 예외 기반 분석방지 기술(예시)] 분석방지 기술(Anti-Analysis)은 SW 보호 기술 중 한 갈래로, 분석용 도구의 분석을 방해하거나 금지시키는 기술이다. 예외 기반의 분석방지 기술은 구현하기도 가장 까다로운데, 어떤 예외를 적절하게 일으킬지를 알고 있어야 구현 가능하기 때문이다. 그림의 함수 소스코드는 C언어로 구현되어 있으며, SingleStep이라는 예외를 강제로 발생시키는 함수(SingleStep의 의미는 다음 포스트에서 확인할 수 있다.)이다. 예외가 발생하였기 때문에 예외 처리문(Exception Handling)을 실행하게 되는데, 그 코드가 바로 “return FALSE;”이다. 여기서 FALSE는 분석 도구가 탐지되지 않았다는 의미이다. 그..
-
[2022/03/17][짤막한 이야기 - 예외 기반 분석방지 기술(개념)]짤막한 이야기 2022. 3. 17. 17:22
[2022/03/17][짤막한 이야기 - 예외 기반 분석방지 기술(개념)] 분석방지 기술(Anti-Analysis)은 SW 보호 기술 중 한 갈래로, 분석용 도구의 분석을 방해하거나 금지시키는 기술이다. 일반적으로 분석 도구의 탐지(Detection)와 분석 도구가 탐지되었을 경우의 대응(Response)을 합하여 분석을 방지한다고 일컫는다. 대응의 경우는 대부분 대동소이하다. 그 분석 도구를 강제로 종료시키거나 보호 대상이 되는 SW(자기 자신)를 강제로 종료시키는 것이다. 그런데 탐지 방법은 대응 방법에 비하여 훨씬 더 다양하다. 이번 포스트에서는 예외(Exception)를 기반으로 하여 분석 도구를 탐지하는 방법을 개념적으로 설명하고자 한다. “예외”는 이미 프로그래머들이 잘 알고있는 개념이다. 예..
-
[2022/03/16][짤막한 이야기 - 다이나믹 베이스]짤막한 이야기 2022. 3. 16. 08:18
[2022/03/16][짤막한 이야기 - 다이나믹 베이스] 다이나믹 베이스(Dynamic Base) 또한 Windows의 EXE 파일(= 소프트웨어)이라면 반드시 가지고 있는 속성이다. 이는 앞선 포스트에서의 이미지베이스(ImageBase)에 적용되는 개념으로 볼 수 있으며, 이 이미지베이스를 “프로그램 실행 시마다 매번 다르게 부여”하는 특징이 있다. 즉, 이미지베이스 값이 0x400000으로 되어있어도 실행할 때 반드시 0x400000이라는 보장이 없는 것이다. 아래 디버거에서의 스크린샷을 보면 주소가 0xD22886으로 되어있으며, 이는 이미지베이스가 0x400000이지만 다이나믹 베이스가 적용되어 있어서 실제 적재된 이미지의 시작위치가 0x400000이 아닌 0xD10000으로 변경된 경우이다. ..
-
[2022/03/15][짤막한 이야기 - 이미지베이스]짤막한 이야기 2022. 3. 15. 13:30
[2022/03/15][짤막한 이야기 - 이미지베이스] 이미지베이스(ImageBase)는 Windows의 EXE 파일(= 소프트웨어)이라면 반드시 가지고 있는 속성이다. 이미지 상태에서의 베이스 값을 의미하는데, 즉, 프로그램이 메모리에 적재될 때의 시작위치를 의미한다. 그림의 PEView는 HelloWorld.exe를 UPX 패커로 패킹을 적용하였을 때의 이미지베이스를 보여준다. 0x400000의 위치에 HelloWorld.exe가 적재될 예정이라는 의미이다. 일반적으로 컴파일러가 소스코드를 프로그램으로 컴파일할 때, 이미지베이스는 0x400000으로 자동 설정된다. 그런데 그림의 아래에서 4가지의 이미지를 볼 수 있는데, 각각의 시작주소가 모두 다름을 확인할 수 있다. 4개의 프로그램은 모두 이미지베..