[Python] 로그 생성기 사용하기
본문 바로가기

Python

[Python] 로그 생성기 사용하기

728x90
반응형

목표

  • 현실적인 DLP/엔드포인트 보안 로그지속적인 TCP 연결로 여러 수집 서버(예: Splunk)에게 실시간 전송
  • 로스터(명부) CSV를 통해 IP–호스트명–OS–부서–MAC–사용자가 서로 일관되게 찍힌 합성 로그 생성
  • 지터/버스트 모드로 트래픽에 요철(variance)을 줘서 실제에 가까운 패턴 재현

특징

  • Persistent TCP(끊기면 자동 재연결, 백오프)
  • 여러 타깃 동시 전송(TARGET_IPS)
  • 로컬 타임존(+09:00 등) 타임스탬프
  • 옵션: --rate(EPS), --jitter, --burst-rate/period/duration, --print(콘솔 복제 출력)

사전 준비물

  • Python 3.8+
  • 네트워크로 열려 있는 수신 포트(난 TCP 8514)
  • Splunk 등의 수집 서버 / StandAlone

 

[작업폴더 구성]

 

 

[Python] 로그 생성기 만들기

1) 상단 개요 & 의존성argparse: 커맨드라인 옵션(속도, 지터, 버스트, 로스터 경로 등) 처리.socket, threading, queue: Persistent TCP 송신 스레드 구현용.random, time, datetime: 이벤트 생성 시각/간격, 값 난수화.c

authentic-information.tistory.com

 

 

siem-gen/
 ├─ synth_siem_persistent_roster.py
 └─ roster.csv        # 로스터(명부) 파일

 

 

 

[ 로스터 CSV 만들기 ]

로스터란?

  • 클라이언트(노트북/PC) 의 속성을 한 줄에 정리한 명부
  • 헤더(필수): ip,hostname,os,department,mac,username,userid
    (대소문자 무관, 공백은 자동 무시)

  • 엑셀에 붙여넣고 CSV UTF-8로 저장
  • MAC 주소의 0xA~0xF 같은 16진 문자는 그대로 두기(엑셀 자동 변환 주의)

 

 

[ 스크립트 설정 (TARGET_IPS 등) ]

synth_siem_persistent_roster.py 상단에 전송 대상 기입

TARGET_IPS = [
    "192.168.0.50",  # Splunk/수집서버 IP
    # "192.168.0.51",
]
TARGET_PORT = 8514  # TCP 8514 권장

 

 

헤더(장비 식별자)는 기본값 지정

SRC_DST_HOSTS = {
    "10.10.10.1": "Uclick_DLP_1",
    "10.10.10.2": "Uclick_DLP_2",
}

 

 

[ 수집 서버 준비 (빠른 확인 / Splunk 설정)  ]

1. 초간단 수신 테스트(콘솔로 받기)

nc -lk 8514
ncat -lk -p 8514
여기까지 켜놓고, 스크립트를 돌려보면 콘솔에 로그가 줄줄 들어오는지 바로 확인 가능.

 

[ 실행! (기본 / 버스트 / 고EPS) ]

1. 기본 실행 (분석 연습)

python synth_siem_persistent_roster.py --roster ./roster.csv --rate 50 --jitter 0.1 --print

 

  • 50 EPS, ±10% 지터, 콘솔에도 복제 출력
  • 여러 타깃에 영구 TCP로 전송(끊기면 재연결)

 

2. 버스트 모드 추가

python synth_siem_persistent_roster.py --roster ./roster.csv --rate 50 --jitter 0.1 --burst-rate 500 --burst-duration 10 --burst-period 60 --print

 

  • 평소 50 EPS 유지
  • 매 60초마다 10초간 500 EPS까지 스파이크 → 현실감 UP

 

3. 고EPS 스트레스

python synth_siem_persistent_roster.py --roster ./roster.csv --rate 1000 --jitter 0.2 --burst-rate 3000 --burst-duration 5 --burst-period 45

 

 

중단: Ctrl + C
스크립트는 송신 스레드를 안전 종료하고 빠져나옴.

 

 

 

 

 

# 실시간: 1초 간격으로 계속 생성 (Ctrl+C로 종료)
python synth_siem_realtime.py --realtime

# 실시간: 초당 5건, ±20% 지터, 200건만 찍고 종료
python synth_siem_realtime.py --realtime --rate 5 --jitter 0.2 --count 200

# 배치: 100건을 0.5초 간격으로 시간 증가시켜 생성 (한 번에 출력)
python synth_siem_realtime.py --count 100 --interval 0.5

# 출력 파일에 append
python synth_siem_realtime.py --realtime --rate 2 --out logs.txt

 

 

 

 

728x90
반응형