본문 바로가기
반응형

WebBook15

윈도우 구조 - 커널 예외 처리 이해 하기, KeBugCheckEx 이번에는 윈도우 예외 처리 이해 하기로 KeBugCheckEx에 대해서 알아보도록 하겠다.윈도우에서는 IDT(Inturrupt Descriptor Table)를 이용해 인터럽트 및 예외(Exception)를 처리하는데, BSOD와 같은 예외 상황 역시 IDT 테이블 통해 처리되며, 최종 KeBugCheckEx를 통해 오류상황에 대처한다. 그럼 KeBugCheckEx의 구조체를 알아보자.VOID KeBugCheckEx( __in ULONG BugCheckCode,__in ULONG_PTR BugCheckParameter1,__in ULONG_PTR BugCheckParameter2,__in ULONG_PTR BugCheckParameter3,__in ULONG_PTR BugCheckParameter4);첫.. 2024. 6. 8.
윈도우 구조 - 메모리 덤프 생성과 분석 기초 윈도우에서 메모리 덤프 분석은 난이도가 높고 넓어서, 하지만 운영 중 발생하는 문제점들을 해결하는 것 역시 관리의 중요 이슈이기에, 여기서 다루어야 한다고 판단하였다. 아마 문제 해결을 원활히 하기 위해서는 커널 분석뿐만 아니라 시스템 영역을 전반적으로 이해하고, Windbg가 숙달되었을 때, 원활한 분석을 진행할 수 있을 것이다. 여기에서 설명하는 정도로 장애시 커널 분석을 원활히 진행하기는 어렵지만, 블루스크린의 처리 프로세스에 대해 이해하고, 메모리 덤프를 생성하는 것과 일반적인 분석 방법론에 대해 이해할 수 있도록 하여, 여러분들이 더 큰 그림을 볼 수 있는 안목을 만들어, 앞으로 나아갈 수 있게 하고자 함이 목표임을 이야기하고 진행하도록 하겠다. BSOD (Blue Screen of Death).. 2024. 4. 12.
윈도우/리눅스 – 가상 메모리 관리(Paging, Swap) 리눅스와 윈도우는 메모리 관리 방법에 대해서 얘기해 보고자 한다. 윈도우와 리눅스는 기본적으로 메모리 관리 체계는 같다. 다만 이를 운용하는 방식이 조금 다르다고 할 수 있다. Windows / Linux 가상 메모리 관리 – Paging, Swap 윈도우와 리눅스 모두 부족한 메모리를 위해 페이징(paging), 리눅스에서는 스왑(swap)을 통해 부족한 메모리를 보조저장장치인 하드 디스크를 사용하게 된다. 이를 보통 “가상 메모리“라고 하며, 현재 사용중인 가상 메모리 용량을 확인하기 위해서는 다음과 같은 명령으로 확인이 가능하다. Linux 가상 메모리 – 확인 리눅스의 경우 free 명령을 통해서 확인할 수 있다. 아래 명령은 메모리 사용량을 Megabyte 단위로 사용량을 표시하는 방법이다. s.. 2024. 2. 23.
윈도우 예외 처리 이해 하기 - KeBugCheckEx 이번에는 윈도우 예외 처리 이해 하기로 KeBugCheckEx에 대해서 알아보도록 하겠다. 윈도우에서는 IDT(Inturrupt Descriptor Table)를 이용해 인터럽트 및 예외(Exception)를 처리하는데, BSOD와 같은 예외 상황 역시 IDT 테이블 통해 처리되며, 최종 KeBugCheckEx를 통해 오류상황에 대처한다. 그럼 KeBugCheckEx의 구조체를 알아보자. VOID KeBugCheckEx( __in ULONG BugCheckCode, __in ULONG_PTR BugCheckParameter1, __in ULONG_PTR BugCheckParameter2, __in ULONG_PTR BugCheckParameter3, __in ULONG_PTR BugCheckParamet.. 2022. 9. 13.
윈도우 구조 - 커널 진입 - Ntdll.dll 세부 분석 우리가 편지를 쓴다면, 보내는 사람은 “나”라는 이름으로 편지를 보내고, 받는 사람 “너”라는 사람이 편지 내용을 읽고 회신하게 된다. 이 과정 속에 실질적인 편지 배달은 우체국에서 진행하게 된다. 우체국은 중간에서 편지를 각 지역별로 구분한 후, 공통된 배달 방식에 맞게 구분하여 편지를 배달해 주는 것이다. 이와 같은 원리는 시스템에서도 볼 수 있다. 편지와 비교해 본다면, “나”는 응용프로그램으로 사용자의 입력이나, 처리 요청을 받아 개발 의도에 맞게 가공하여 커널에 처리를 요청하게 된다. 그리고 커널은 편지에서 “너”라고 할 수 있다. 이 둘간의 전달 역할을 해주는 것이 서브시스템과 Ntdll.dll로써, 서브시스템은 바로 우편배달부처럼 각 지역 요청들을 수집하여 우체국에 전달하고 이를 우체국과 유.. 2022. 4. 2.
보안의 어려움 보안 요소들을 실제 코드와 어플리케이션에 반영하는 것은 쉬운일이 아니다. 아래 그림은 현재 마지막으로 조사된 DevSecOps에게 2018년도 조사한 내용으로 DevSecOps가 있는 조직과 없는 조직의 어플리케이션 보안성 검사에 대해 비교해 놓은 부분이다. 한눈으로 보아도 각 단계별로 DevSecOps가 없는 조직과 있는 조직의 보안 수준에 대해 상당한 차이가 있음을 알 수 있다. 이유를 알기 위해서는 일반적인 보안 검사 방법에 대해서 이해해볼 필요가 있다. 아래 그림은 일반적인 보안 검사에 걸리는 시간이다. 위 상황을 보면, 개발 코드를 받아서 보안팀에서 소비해야 하는 부분들중 코드 검사도 크지만, 보고서 작성과 예외 협의등에서 상당한 시간이 필요하게 된다. 하지만 현재 개발 속도는 점점 빨라지고 있.. 2022. 3. 23.
시스템 프로세스(Windows Startup Process) - 자동 실행 - Userinit.exe Userinit Logon Application 약자로, 이름에도 알 수 있듯이 유저 세션의 환경을 초기화 해주는 프로세스이다. 사용자 인증을 거쳐 로그인에 성공하면 Logon script를 실행하고, 사용자 환경에 GPO(그룹 보안정책) 적용과 같은 사용자 환경의 위한 초기화 작업를 수행한 이후 마지막으로 우리에게 익숙한 Explorer.exe를 실행하고서 본 프로세스는 스스로 종료된다. 관련 정보는 레지스트리는 HKLM\SOFTWARE\Microsft\Windows NT\CurrentVersion\Winlogon 의 하위 Userinit 값를 통해 확인할 수 있다. 그럼 Logon script는 어디서 실행하는 것일까? HKCU\Software\Policies\Microsoft\Windows\Syst.. 2022. 3. 23.
윈도우 - 서비스 계정 실무를 시작하면서 가장 많이 헷갈려 하는 부분이 바로 서비스들이 사용하는 계정이였다. 대부분의 사용자들이 서비스 계정 부분을 잘 이해하지 못하고 그저 서비스 문제가 생길 수 있겠다 생각하며 관리자 권한을 주거나 로컬 시스템 계정을 주게 된다. 하지만 이는 보안적으로 봤을 때, 해당 서비스에 과도한 권한을 주어, 해당 서비스로 인해 서버가 노출되거나 백도어가 심어지는 등의 공격을 당할 수 있는 문제를 야기할 수 있다. 그럼 서비스에서 사용하는 계정들이 무엇이 있고, 어떠한 권한들이 있는지 알아보도록 하자. 일반적으로 서비스에 계정을 등록하지 않는다면, 대부분의 서비스는 로컬 시스템 계정(SYSTEM 혹은 LocalSystem으로 표시)으로 실행되게 된다. 그 외에는 네트워크 서비스(Network Servi.. 2022. 3. 23.
시스템 프로세스(Windows Startup Process) - 서비스 관리자 Services.exe Service Control Manager로 SCM(이하 SCM)이라고도 불리며, 부팅시 Winlogon에 의해(윈도우 7/8/10/11은 Wininit) %Systemroot%\System32\Services.exe를 실행하게 된다. 이 프로세스는 서비스의 시작, 중지와 같은 서비스들과 상호 작용을 담당하고 상태 정보를 서비스 관리도구에게 전달하는등의 단순 서비스 제어 역활을 수행하게 된다.. 서비스는 대화식 로그온이 없이도 시스템 부팅 중 자동으로 실행되게 구성이 가능한 프로세스를 의미하며, 로그온 이후 수동으로 서비스를 시작하거나, 중지할 수 있다. 이 프로세스는 서비스 관리 도구와 상호 작용을 위해 단순히 윈도우 함수만을 호출한다.그리고 서비스는 HKLM\SYSTEM\CurrentControlSe.. 2022. 3. 14.
반응형