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
[작업폴더 구성]
- 작업 폴더 만들기(예: siem-gen)
- 스크립트 생성 (synth_siem_persistent_roster.py)
https://authentic-information.tistory.com/148 - 폴더 구조 예
[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
반응형
'Python' 카테고리의 다른 글
| [Python] 로그 생성기 만들기 (6) | 2025.08.12 |
|---|---|
| [ Python Code ] xlsx 파일 html 코드로 변경하기 (0) | 2024.07.09 |
| [Python] Pretty Printer 예쁘게 출력하기 (0) | 2023.04.27 |