libc GOT overwrite
RELRO 메모리 보호 기법 중 RELRO(RELocate Read-Only)라는 것이 있다. 이는 쓰기 권한이 불필요한 데이터 영역에 쓰기 권한을 제거한다. RELRO 적용 대상 중 유심히 여겨봐야 할 것은 GOT(Global Offset Table)이다. 현대의 바이너리 실행 환경에서는 ASLR(Address Space...
RELRO 메모리 보호 기법 중 RELRO(RELocate Read-Only)라는 것이 있다. 이는 쓰기 권한이 불필요한 데이터 영역에 쓰기 권한을 제거한다. RELRO 적용 대상 중 유심히 여겨봐야 할 것은 GOT(Global Offset Table)이다. 현대의 바이너리 실행 환경에서는 ASLR(Address Space...
커널 커널은 기본 메커니즘을 제공하는 ntoskrnl.exe 내의 함수 집합으로 구성된다. 이들 함수에는 익스큐티브 컴포넌트에 의해 사용되는 스레드 스케줄링과 동기화 서비스 및 각 프로세서 아키텍처별로 다른 인터럽트와 예외 디스패칭 같은 저수준 하드웨어 아키텍처 종속적인 지원이 해당된다. 커널 코드는 주로 C로 작성...
유저 모드와 커널 모드 간의 구분은 유저 모드로부터 OS에 대한 보호를 제공한다. == 모든 커널 코드는 전체 시스템에 완전히 접근할 수 있다. 바람직하지 않은 커널 모드 코드가 시스템에 침투한다면 시스템은 기본적으로 위태롭게 된다. 패치가 이뤄지지 않은 커널이나 드라이버 취약점 등. 공격에 ...
핵심 윈도우 시스템 아키텍처와 컴포넌트에 대한 좀 더 상세하고 완전한 다이어그램 환경 서브시스템과 서브시스템 DLL 환경 서브시스템의 역할은 기본 윈도우 익스큐티브 시스템 서비스의 일부분을 애플리케이션에 공개하는 것이다. 각 서브시스템은 윈도우의 네이티브 서비스에 대한 다른 부분집합을 제공할 수 있다. ...
아키텍처 개요 아키텍처의 단순화된 버전을 살펴보자. 윈도우 OS의 유저 모드와 커널 모드를 선으로 구분하고 있다. 유저 모드 스레드는 개별 프로세스 주소 공간에서 실행된다. 시스템 프로세스와 서비스 프로세스, 유저 애플리케이션, 환경 서브 시스템은 각기 고유한 개별 프로세스 주소 공간을 가진다. ...
대부분의 멀티유저 운영체제에서 애플리케이션은 OS와 분리되어 있다. OS 커널 코드는 특권이 있는 프로세서 모드에서 시스템 데이터와 하드웨어에 접근하며 실행된다. 애플리케이션 코드는 특권이 없는 프로세서 모드에서 실행되며, 제한된 인터페이스와 시스템 데이터에 대한 제한된 접근만이 가능하고 하드웨어에 직접 접근은 불가능하다...
kdnet(Kernel Debugger over Network)은 커널 디버깅을 할 때 사용하는 네트워크 기반 디버깅 프로토콜이다. Windows 가상머신을 설치한 후, WinDbg를 이용해 커널 디버깅을 할 수 있다. Windows SDK를 설치할 때 함께 설치된다. kdnet의 경로는 아래와 같다. C:\\...
WinDbg에서는 심볼 파일이 저장될 경로와, 심볼 파일을 다운로드할 서버의 주소를 직접 지정할 수 있다. 이 글에서는 WinDbg Classic이 아닌 최신의 WinDbg를 기준으로 설명합니다. WinDbg를 실행한 후, 파일 - Settings - Debugging Settings 탭으로 들어간다. 기본적으로는...
WinDbg 설치 방법에는 크게 3가지가 있다. (더 있나?) Windows SDK를 이용한 설치(WinDbg Classic) Microsoft에서 제공하는 Windows SDK를 설치하면 WinDbg Classic을 설치할 수 있다. Google에 “Windows SDK”를 검색하거나, 아래 링크에 접속한다. (Windows 11 기준)...
윈도우의 프로세스는 EPROCESS(Executive Process) 구조체로 표현된다. 여러 가지 속성뿐만 아니라 연관된 여러 가지 다른 구조체들을 가리키는 포인터를 갖는다. 예를 들어, ETHREAD(Executive Thread) 구조체로 표현되는 하나 또는 그 이상의 스레드를 가지고 있다. EPR...