보안교과서
[SeSAC 성동캠퍼스] 어플리케이션 보안_취약점 진단 본문
ipv4(현재의 인터넷 프로토콜) vs ipv6
ipv4의 한계인 주소 표현의 제약으로 인한 주소고갈, 멀티미디어서비스 대응 미약 등을 고려하여
PE파일이란
PE(Portable excutable) 파일은 원도우 상에서 실행할 수 있는 프로그램을 말한다.
FAT32 용량 제한이 있다 .(8GB)
클러스터 크기가 크면 클수록 속도는 빠르지만 공간 낭비가 심하다.
API Hooking
API(application programing interface)
window os에서는 사용자 어플리케이션이 시스템 자원을 사용하고 싶을 떄 직접 할 수 있는 방법이 없다고 한다.
왜냐하면 그것들은 os가 직접 관리하며, 여러가지 이유로 사용자 어플리케이션의 직접적인 접근을 막아놓아서
가능하게하려면 application은 시스템 커널(system kernel)에게 요청해야합니다 . 요청 방법이 ms에서 제공한 api 를 이용하는 것
hooking
리버싱에서 후킹은 정보를 가로채고, 실행 흐름을 변경하고, 원래와는 다른 기능을 제공하는 기술입니다.
- 후킹 전체 프로세스 -
- 디스어셈블리/디버거를 이용하여 프로그램 구조,동작원리 파악
- 버그 수정 또는 기능 개선에 필요한 hook 코드 개발 [ ]
- 실행 파일과 프로세스 메모리를 자유롭게 조작하여 hook 코드 설치
FUZZER
실행파일
Frida
java script로 만들었다 .
FileMon for Windows - Sysinternals
visual studio로 들어가서
terminal 창에
pip install frida frida-tools
cmd 입장
cmd 창
frida
echo %path%
die /a /s frida.exe
visual studio에서
자바스크립트 실행 .js
var hook_createprocess = Module.getExportByName(
"Kernel32.dll",
"CreateProcessW"
); // 해당 함수의 주소를 리턴함
Interceptor.attach(hook_createprocess, {
onEnter(args) {
var lpApplicationName = args[0];
console.log(lpApplicationName);
},
onLeave(result) {},
});
코드 입력
exit 후 본인의 explore.exe 콘솔 포트를 확인해야한다
활동하면 밑에 뜸
메모리 침투 디버깅
var hook_createprocess = Module.getExportByName(
"Kernel32.dll",
"CreateProcessW"
); // 해당 함수의 주소를 리턴함
Interceptor.attach(hook_createprocess, {
onEnter(args) {
var lpApplicationName = args[0];
console.log(Memory.readUtf16String(lpApplicationName));
},
onLeave(result) {},
});
참조해서 lpCommandLine 라인 추가
BOOL CreateProcessA(
[in, optional] LPCSTR lpApplicationName,
[in, out, optional] LPSTR lpCommandLine,
[in, optional] LPSECURITY_ATTRIBUTES lpProcessAttributes,
[in, optional] LPSECURITY_ATTRIBUTES lpThreadAttributes,
[in] BOOL bInheritHandles,
[in] DWORD dwCreationFlags,
[in, optional] LPVOID lpEnvironment,
[in, optional] LPCSTR lpCurrentDirectory,
[in] LPSTARTUPINFOA lpStartupInfo,
[out] LPPROCESS_INFORMATION lpProcessInformation
);
var hook_createprocess = Module.getExportByName(
"Kernel32.dll",
"CreateProcessW"
); // 해당 함수의 주소를 리턴함
Interceptor.attach(hook_createprocess, {
onEnter(args) {
var lpApplicationName = args[0];
console.log(Memory.readUtf16String(lpApplicationName));
var lpCommandLine = args[1];
console.log(Memory.readUtf16String(lpCommandLine)); // 인자값까지 출력됨
},
onLeave(result) {
console.log(result);
},
});
dll (dynamic linking library)
OS/2, 윈도 등의 운영 체계(OS) 본래 기능으로 소프트웨어의 루틴을 몇 개의 파일로 나누어 디스크에 두고 필요한 것만을 실형 메모리에 실어서 사용하기 위한 파일. DLL로 사용되는 파일은 확장자가 ‘dll’로 되어 있기 때문에 ‘DLL 파일’이라고 부른다. DLL의 장점은 루틴을 공통으로 사용하는 것이다. 루틴의 함수 집단을 자료집(library)이라 하는데, 보통 실행 파일을 작성할 때 자료집을 포함해서 컴파일하는 경우가 많다. 그러나 이 방법은 동일 루틴을 다수의 실행 파일이 갖는 것으로 되어 비효율적이다. DLL은 다수의 실행 파일에 공유될 수 있기 때문에 디스크 용량이나 메모리를 절약할 수 있다. 또 프로그램을 수정하려는 경우, DLL 파일만을 수정함으로써 완료되는 경우도 있다. 윈도 등에서는 OS 기능은 물론 DLL을 애플리케이션과 공유할 수도 있으며, DLL 파일 등의 애플리케이션이 공유되고 있는 것은 이용자 수준에서 판단하기는 어렵다.
'SK쉴더스' 카테고리의 다른 글
[SeSAC 성동캠퍼스] sesac 1기 성동캠퍼스 리눅스 11/09 (0) | 2023.11.09 |
---|---|
Linux 기본 명령어 LIST (0) | 2023.11.08 |
[sesac 성동캠퍼스 1기] 11/08 리눅스교육 5일차 (0) | 2023.11.08 |
[sesac 성동캠퍼스 1기] 11/07 인프라 활용을 위한 파이썬프로그래밍 교육 6일차 (0) | 2023.11.07 |
[SeSAC 성동캠퍼스] server에 있는 doge사진 웹에 올리기 (0) | 2023.11.07 |