Prefix Prefix Kernel component Cm Configuration manager Ex Executive Hal Hardware abstraction layer Io I/O manager Ke Kernel core Mm Memory manager Ob Object manager Po Power manager Tm Transaction manager Se SRM (Security Reference Monitor) Nt and Zw Native system services Nt와 Zw의 경우, 커널 모드에서 직접 API를 호출하거나 사용자 모드에서 System Call을 호출하여 해당 API에 접근할 수 있다. 이 때, Previous Mode로 이전에 어디에서 해당 함수를 호출하였는지 체..
보호되어 있는 글입니다.
개요 본래 프로세스끼리는 서로의 고유 영역에 접근이 불가능하다. 하지만 IPC(Inter-Process Communication) 통신을 이용해 프로세스간 통신을 할 수 있다. 이 때 IPC를 사용하면 프로세스간 Read/Write를 하는 것이다. 하지만 RPC(Remote Procedure Call)는 이름 그대로 원격에서 프로시저(Procedure)를 호출할 수 있다. 따라서 RPC를 사용하면 프로세스간 Execute를 하는 것이다. RPC 통신 구조 ... API 목록 공통 API UuidFromString : Uuid 형태의 문자열을 Hex 값 Uuid로 변환 반환값 : RPC_STATUS 타입의 결과 값 첫 번째 인자 : StringUuid, Uuid 형태의 문자열 주소 두 번째 인자 : Hex..
서론 kernel에서 프로세스가 실행된다고 생각하면 컴퓨터를 공부하면 한번 쯤은 보게 되는 운영체제 구조 그림과 매칭이 되지 않는데 뭔가 이상하다는 것을 확인할 수 있다. 그래서 보통 Local PC에서 kernel exploit을 하게 되면 특정 프로세스를 실행시킨 후에 token stealing과 같은 방법으로 해당 프로세스에 권한을 부여해주는 shellcode를 사용한다. 그럼 Remote PC에서의 shellcode는 어떻게 될까? 특정 프로세스를 실행하는 것부터 막막해진다. 그래서 궁금증을 풀기 위해 유명한 Remote kernel exploit인 EternalBlue 취약점에서 사용되었던 kernel shellcode를 분석하고자 한다. 요약 해당 shellcode는 코드 전체가 한 번에 다 ..
원본 : https://www.gatewatcher.com/en/news/blog/windows-kernel-pool-spraying - 여기에서 설명한 내용은 Windows 8 이후부터 단순 pool spray 방법만 사용 가능하다. - Introduction의 논문 link [1][2]와 결론의 [5]는 원본 link에 있음 -------------------------------------------------------------------------------------------------- 1) Introduction kernel의 pool 할당자는 여러 chunk들에 대해서 각각의 chunk 헤더를 하나하나 체크하기 때문에 kernel의 pool에서 발생하는 취약점을 익스플로잇할 때 BSO..
방법 Windows의 업데이트 파일인 .msu를 받는다. .msu 파일을 추출해서 업데이트 패키지를 얻는다. 업데이트 패키지에서 .msu 파일의 이름 앞부분과 동일한 이름의 .cab 파일을 확인한다. .cab 파일을 추출해서 실제 Windows에 업데이트되는 파일들을 얻는다. .msu 파일을 받는 방법(보안 업데이트 파일만) : https://portal.msrc.microsoft.com/en-us/security-guidance 해당 링크에서 받고자 하는 업데이트 버전에 맞춰 Windows 플랫폼과 Article, Details를 확인해서 받으면 된다. 찾았다면 Download의 링크를 클릭해 해당 업데이트의 Microsoft Update Catalog로 이동한 다음, Title에 나오는 플랫폼 등을 ..
Job 객체 프로세스들의 그룹을 1개의 단위로 관리하도록 허용해주는 객체이다. Job 객체와 연관된 프로세스들은 Job 객체를 제어할 때 함께 제어되는데, 여기서 하나의 작업을 위해 여러 프로세스들이 동작하는 경우 이를 Job 객체로 묶어 쉽게 제어 가능하다는 이점이 있다. 스레드가 실행 흐름 단위, 프로세스가 실행되는 자원 단위였다면 Job은 작업의 단위라고 생각하면 된다. 주요 기능프로세스 및 Job의 자원 사용과 같은 기본 제한 (JOBOBJECT_BASIC_LIMIT_INFORMATION)사용자 인터페이스 사용 제한 (JOBOBJECT_BASIC_UI_RESTRICTIONS)cpu 사용 제한 (JOBOBJECT_CPU_RATE_CONTROL_INFORMATION)JOBOBJECT_BASIC_LIM..
Windows 인증 과정1 (개요) : http://tribal1012.tistory.com/221Windows 인증 과정2 (로컬) : http://tribal1012.tistory.com/222------------------------------------------------------------------------------------------------------------------------------------------- SPNEGO(Simple and Protected GSS-API Negotiation Mechanism) GSS-API를 사용하기 위해 협상하는 메커니즘이다. 절차에 따라 무사히 협상되게 되면 서버와 클라이언트는 서로가 같은 GSS(General Security S..
Windows 인증 과정2 (로컬) : http://tribal1012.tistory.com/222Windows 인증 과정3 (원격) : http://tribal1012.tistory.com/223-------------------------------------------------------------------------------------------------------------------------------------------Windows 인증 과정(좀 더 세세하게 수정 필요)로컬 또는 원격으로 Windows에 로그인LSA에 접근LSA에서 인증 패키지를 결정하고, 로그인에 필요한 자격 정보를 인증 패키지에 전달인증 패키지가 인증 여부 확인LSA에 인증 여부 전달성공적으로 인증되었다면, L..
LUID Process와 Thread 가질 수 있는 권한에 대한 64bit 크기의 식별자, Access Token의 정보에 포함되어 있다. LUID(Locally Unique IDentifier) 목록(line 번호가 LUID 값)1234567891011121314151617181920212223242526272829303132333435#define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")#define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege")#define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")#define SE_INCREASE_..