엔드포인트(Endpoint) 보안 분석 항목

보안 위협 또는 침해사고가 발생하는 경우 개별 시스템에 대한 조사 및 분석을 진행 한다. 엔드포인트 시스템에는 보안 위협과 연관된 다양한 정보가 포함되어 있다. 사용자 정보, 시스템 구성 정보, 서버 설정, 컨텐이너 구성 파일, 가상 운영 환경 설정 등 환경에 따라 다양한 정보를 분석 과정에 조사하게 된다. 엔드포인트 시스템의 주요 보안 분석 항목을 살펴 보자.

운영 체제 로그 분석

로그 파일의 분석 정보는 좁은 의미로 해석하면 우리가 자주 사용하는 PC나 노트북 또는 서버 장비에서 기록하는 정보를 의미한다. 각각의 장비에는 운영체제가 동작하고 운영체제에 따라 관련 로그를 기록한다. 침해사고가 발생하면 운영체제에서 기록하는 로그를 수집해 이상 징후 분석에 활용 한다. 운영체제에는 사용자가 필요에 따라 설치한 응용프로그램이 동작한다. 개별 응용프로그램은 동작과 관련된 로그를 기록하게 되고 이 또한 위협 분석 시 수집되는 정보다.

구분수집 항목주요 분석 항목
윈도우시스템 보안 이벤트 레지스트리 정보이벤트 ID중요 레지스트리 수정 항목
리눅스운영체제 로그 애플리케이션 로그보안 로그사용자 인증 로그
애플리케이션웹 로그 데이터베이스 로그웹 요청 정보응답코드
표 로그수집항목

대표적인 엔드포인트 시스템으로 윈도우와 리눅스가 있다. 윈도우 로그는 크게 운영체제자체의 로그와 애플리케이션에 의해 발생되는 로그로 구분해 볼 수 있다. 윈도우에서 운영체제 로그의 가장 대표적인 로그는 이벤트로그다. 컴퓨터관리의 이벤트 뷰어를 통해 확인이 가능한데 운영체제의 보안 로그와 시스템 로그를 제공한다. 엔드포인트 시스템 로그 형식과 종류에 대해서는 자세히 살펴보자.

운영체제 정보

운영체제 버전 확인은 점검 대상 시스템 기본 정보 수집 항목 중 하나이다. 윈도우의 경우 “ver”명령을 이용해서 운영체제 버전을 간단하게 확인할 수 있다. cmd명령 창에서 ver명령을 입력하면 버전 정보를 확인 할 수 있다. 버전 정보를 확인하는 이유는 시스템에 영향을 미치는 취약점을 확인하기 위해서다. 공개된 취약점 공격 도구의 경우 OS나 응용프로그램 버전에 따라 영향 여부가 틀려진다. 내장 명령외 자주 사용하는 점검 툴인 psinfo.exe 명령을 이용해서 텍스트 기반으로 결과를 확인할 수 있다. Sysinternals에서 제작된 툴 모음에 포함된다.

그림 psinfo 실행 화면(이미지 출처[1])


[1] https://learn.microsoft.com/en-us/sysinternals/downloads/psinfo

리눅스에서는 ‘uname’ 명령을 이용해 시스템 정보를 확인 한다. 커널 버전과 OS정보를 확인할 수 있고, 리눅스의 경우 Exploit마다 취약한 Kernel 버전이 있기 때문에 로컬 또는 원격에서 Exploit공격을 시도할 때 버전 정보가 중요하게 쓰인다.

$uname –a
Linux linuxos 5.15.0-1083-gcp #92~20.04.1-Ubuntu SMP Tue Apr 29 09:12:55 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

파일 시스템 정보

파일 시스템 정보는 넓은 의미에 흔히 말하는 C, D, E 등의 파티션 정보나 물리적 디스크 정보를 말한다. 단순 시스템 경로 파악하거나 할당되지 않은 디스크 공간이 있는지 등을 확인한다. 일부 악성코드의 경우 비데이터 영역에 악성코드를 삽입해 구동되는 경우도 있다. 이러한 경우는 일반적인 점검으로 확인이 어렵고, 디스크 이미지를 추출해서 별도의 분석 툴을 이용해 물리 디스크 전체에 대한 점검을 진행해야 한다.

파일 시스템 구조를 알면 직접 디스크상에서 삭제된 파일, 악성코드, 숨김 파일 등을 분석할 수 있다. 좀더 상세한 분석이 필요하거나 법적 증거로 제출하기 위해서는 디스크 이미지를 추출해 분석해야 한다. 이 작업을 위해서는 전용 분석툴이 필요하다.

윈도우는 ‘컴퓨터 관리’ 메뉴에서 논리구조인 파티션과 물리구조인 디스크 정보를 확인할 수 있다. 리눅스 시스템의 경우는 ‘df’ 명령을 이용해 파티션 정보와 물리적 디스크 정보를 확인 할 수 있다.

$df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 7850996 2820552 4631632 38% /
udev 254668 224 254444 1% /dev
none 254668 216 254452 1% /dev/shm
none 254668 96 254572 1% /var/run
none 254668 0 254668 0% /var/lock
none 254668 0 254668 0% /lib/init/rw
/dev/sr0 201018 201018 0 100% /media/cdrom1

IP 정보

IP 정보 수집은 네트워크 관련된 기본 정보를 수집하는 과정이다. IP 정보 수집을 통해 현재 시스템의 네트워크 할당 정보를 확인한다. 간혹 한 개의 시스템에 2개의 다른 IP를 부여해 사용하기도 한다. 이 경우 공격자가 접근한 경로가 2개로 나뉘게 된다. 시스템에 부여된 IP 확인해 침해발생 시 추가로 접근 시도 가능성이 있는 내부 IP대역을 확인 한다. 통상 특정 시스템에 침해사고가 발생할 경우 해당 IP의 동일 서브넷에 포함되는 시스템의 경우 일단 침해가능성에 대해 의심해봐야 한다. 수집된 물리주소(Mac Address)는 ARP 스푸핑 공격 시 공격 시스템을 확인하기 위한 용도로 사용된다. IP정보 확인을 윈도우는 명령 창에서 ‘ipconfig’ 명령을 이용해 확인 가능하다. 리눅스 시스템에서는 ifconfig 명령을 이용해 시스템에 할당된 IP를 확인 할 수 있다.

설치프로그램목록

설치 프로그램 목록은 악성코드 설치 확인이나 정상 소프트웨어 이지만 의도하지 않게 설치된 프로그램이 있는지 점검하고 침해사고와의 연관성을 확인하기 위해 점검 한다. 설치된 프로그램을 점검하는 관점은 설치된 소프트웨어 중 외부와 통신을 위해 사용하거나 시스템을 제어할 수 있는 권한을 가진 소프트웨어에 대해 살펴 보고, 해당 프로그램이 설치된 경우 설치 일자, 설치 계정, 수정일자 등을 이용해 침해사고를 분석하는데 실마리로 이용하게 된다.

윈도우에서 쉽게 확인하는 방법은 제어판의 “프로그램 추가/제거”를 실행 시켜 확인하는 것이다. 이 때 프로그램뿐만 아니라 윈도우 구성요소에 대해서도 확인이 가능하다. 이러한 방법은 GUI기반으로 이뤄지기 때문에 자동화된 스크립트로 결과를 저장하기 어렵다. 분석가가 직접 실행시켜서 눈으로 확인하는 방법이다. 프로그램 목록을 텍스트로 추출해서 일괄 분석에 사용하려면 레지스트리 정보를 이용해 추출 할 수 있다.

그림 윈도우 설치 프로그램(서비스) (이미지 출처: Microsoft 공식 사이트)

패키지정보

그림 프로그램 추가 제거

리눅스는 rpm명령을 이용해 다음과 같이 설치된 프로그램을 확인 할 수 있다. 관리자나 사용자가 설치한적 없는 프로그램이 깔려 있다면 공격자에 의해 설치된 것인지 의심해볼 수 있다.

[root@localhost ~]# rpm -qa | more
python3-perf-5.14.0-284.11.1.el9_2.x86_64
libgcc-11.3.1-4.3.el9.x86_64
setup-2.13.7-6.el9.noarch
filesystem-3.16-2.el9.x86_64
basesystem-11-13.el9.noarch
tzdata-2023c-1.el9.noarch
kernel-headers-5.14.0-284.11.1.el9_2.x86_64
glibc-common-2.34-60.el9.x86_64
glibc-all-langpacks-2.34-60.el9.x86_64
glibc-2.34-60.el9.x86_64
coreutils-common-8.32-32.el9.x86_64
libselinux-3.5-1.el9.x86_64
–More–

Debian 계열의 설치 프로그램 목록 확인 시 dpkg 명령을 이용한다.

그림 dpkg -l | more 명령 실행 샘플 화면

시스템구동정보

윈도우의 경우 작업 스케줄러 구동 로그를 확인하여 스케줄러 작업을 통해 구동되었던 내역을 수집 할 수 있다. 해당 파일은 %SystemRoot%\tasks\SchedLgU.txt 경로에 존재한다. 작업 스케줄에 등록되어 구동을 시도하는 악성 코드나 비정상 서비스를 확인 할 수 있다.

C:\Users\Administrator> dir /a C:\Windows\Tasks   C:\Windows\Tasks 디렉터리   2026-03-10  오전 10:20    <DIR>          . 2026-03-10  오전 10:20    <DIR>          .. 2026-04-12  오후 02:15               654 Adobe Flash Player Updater.job 2026-04-01  오전 09:00             1,102 GoogleUpdateTaskMachineCore.job 2026-04-15  오전 08:30                84 SA.DAT 2026-04-14  오후 11:55             3,420 SCHEDLGU.TXT                4개 파일               5,260 바이트                2개 디렉터리  45,120,540,672 바이트 남음

SCHEDLGU.TXT: 작업 스케줄러의 서비스 로그 파일 이다. 어떤 작업이 언제 실행되었는지, 오류가 있었는지 확인하는 데 매우 중요하다. 최신 윈도우의 작업 스케줄 정보는 주로 아래의 레지스트리와 경로에 XML 형태로 저장 된다. %SystemRoot%\tasks\에 파일이 없더라도 아래 경로를 반드시 확인해야 합니다.
a. 파일 경로: C:\Windows\System32\Tasks
b. 레지스트리: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks

컨테이너 구성 점검

컨테이너 환경은 일반적인 호스트 시스템과 달리 계층적 구조(Image, Container, Orchestrator)를 가지고 있어, 보안 조사 시 각 레이어별 특화된 접근이 필요하다. 컨테이너 보안 분석 시 반드시 점검해야 할 핵심 항목은 다음과 같다.

점검 항목분석 정보
K8s Audit Logs누가, 언제, 어떤 API 호출을 했는지에 대한 기록
Container Stdout/Stderr애플리케이션 레벨의 에러 및 동작 로그
Cloud Trail / VPC Flow인프라 수준에서의 변경 사항 및 네트워크 흐름
Ephemeral Storage컨테이너 삭제 전 생성된 임시 파일 및 변조된 바이너리

엔드포인트 시스템 사고 조사 과정에서 주요 항목을 메뉴얼하게 조사하기는 쉽지 않다. 초기 사고 대응 과정에서 신속하게 필요한 엔드포인트 정보를 수집하기 위해 스크립트를 이용해 필요한 정보를 수집한다.

샘플 스크립트는 윈도우 운영체제에서 실행 가능한 샘플이다. 파워쉘 실행을 통해 필요한 정보를 수집하고 하나의 파일로 저장하는 샘플 스크립트 이다.

$ReportFile = “$env:COMPUTERNAME`_Security_Check.txt”
$Divider = “#” * 60
 
$Content = @”
$Divider
##############  서버 보안 점검 보고서 (v3.0)  ###################
작성자: 송대근
점검일시: $(Get-Date -Format “yyyy-MM-dd HH:mm:ss”)
호스트명: $env:COMPUTERNAME
$Divider
 
[1. 시스템 및 OS 정보]
$(Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version, OSArchitecture | Out-String)
빌드 정보: $((Get-ItemProperty ‘HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion’).CurrentBuild)
 
[2. 네트워크 IP 정보]
$(ipconfig /all | Out-String)
 
[3. 설치 프로그램 목록 (Programs & Features)]
$(Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*,
                   HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* |
  Select-Object DisplayName, DisplayVersion, InstallDate |
  Where-Object { $_.DisplayName -ne $null } | Sort-Object DisplayName | Out-String)
 
[4. 자동 실행 항목 (Registry Run Keys)]
— HKLM Run —
$(Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run | Out-String)
— HKCU Run —
$(Get-ItemProperty HKCU:\Software\Microsoft\Windows\CurrentVersion\Run | Out-String)
 
[5. 예약된 작업 (Scheduled Tasks – 상위 10개)]
$(Get-ScheduledTask | Where-Object {$_.State -ne “Disabled”} | Select-Object TaskName, TaskPath, State | select -First 10 | Out-String)
 
$Divider
“@
 
$Content | Out-File -FilePath $ReportFile -Encoding utf8
Write-Host “점검이 완료되었습니다. 결과 파일: $ReportFile” -ForegroundColor Green