security
CHAPTER 58 / 84
읽기 약 2분
FUNCTION
정규표현식으로 패턴 사냥
핵심 개념
로그, 패킷, 소스코드에서 민감한 정보를 찾아내는 정규식 기법을 배운다.
본문
re 모듈 4대 함수
# ⚠️ 이 코드는 허가된 환경에서만 사용하세요.
import re
# match — 문자열 시작에서만 매칭
re.match(r'\d+', '123abc') # <Match object; match='123'>
# search — 어디서든 첫 매칭
re.search(r'\d+', 'abc123def') # <Match object; match='123'>
# findall — 모두 추출
re.findall(r'\d+', 'a1 b22 c333') # ['1', '22', '333']
# sub — 치환
re.sub(r'\d+', '#', 'a1 b22 c333') # 'a# b# c#'보안 실전 패턴
import re
LOG = """
2026-04-27 10:23:11 192.168.1.10 GET /admin/login.php 200
2026-04-27 10:23:15 10.0.0.5 POST /api/login 401 user=admin
2026-04-27 10:24:01 192.168.1.10 GET /admin/login.php 200
2026-04-27 10:24:05 198.51.100.99 POST /api/login 401 user=root
2026-04-27 10:24:10 198.51.100.99 POST /api/login 401 user=admin
2026-04-27 10:24:15 198.51.100.99 POST /api/login 401 user=root
"""
# IP 추출 (IPv4)
ipv4 = r'\b(?:\d{1,3}\.){3}\d{1,3}\b'
ips = re.findall(ipv4, LOG)
print('발견된 IP:', set(ips))
# 401 응답을 받은 IP만 추출 (의심 시도)
suspicious = re.findall(rf'({ipv4})\s+POST\s+\S+\s+401', LOG)
from collections import Counter
print('실패 횟수:', Counter(suspicious))
# 이메일 추출
email = r'[\w.+-]+@[\w-]+\.[\w.-]+'
# AWS Access Key 탐지 (소스코드 유출 점검)
aws_key = r'AKIA[0-9A-Z]{16}'
# 일반 API 키 패턴 (32~64자 영숫자)
api_key = r'[A-Za-z0-9_\-]{32,64}'
# 강한 비밀번호 검증 (대소문자+숫자+특수문자, 8자 이상)
strong_pw = r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$'
print('강한 비밀번호?', bool(re.match(strong_pw, 'P@ssw0rd!')))명명된 그룹 — 가독성 + 추출
import re
PATTERN = re.compile(
r'(?P<date>\d{4}-\d{2}-\d{2})\s+'
r'(?P<time>\d{2}:\d{2}:\d{2})\s+'
r'(?P<ip>(?:\d{1,3}\.){3}\d{1,3})\s+'
r'(?P<method>GET|POST|PUT|DELETE)\s+'
r'(?P<path>\S+)\s+'
r'(?P<status>\d{3})'
)
for line in LOG.strip().split('\n'):
m = PATTERN.search(line)
if m and m.group('status') == '401':
print(f"⚠️ 인증 실패: {m.group('ip')} → {m.group('path')}")⚠️ ReDoS 주의
(a+)+ 같은 중첩 한정자는 백트래킹 폭발을 일으켜 서비스 마비를 유발합니다.
사용자 입력을 정규식에 넣을 때는 반드시 timeout 또는 re2 라이브러리 사용.
AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude
무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6
내가 작성한 정규식이 로그 파일에서 모든 케이스를 잡지 못하는 이유와 ReDoS 취약점이 있는지 분석해줘.
ChatGPT
무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro
보안 실전 정규식 Top 10 (IP/이메일/JWT/AWS 키/SSN 등)을 복사해서 바로 쓸 수 있는 형태로 정리해줘.
Gemini
무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro
내 웹 서버 로그 전체를 분석해서 비정상 패턴(반복 401, 큰 응답 시간, 이상한 User-Agent)을 정규식으로 자동 탐지하는 스크립트를 만들어줘.
Grok
무료: Grok 4.1 / SuperGrok $30/mo
2026년 보안 분야에서 정규식의 한계 — ML 기반 로그 분석으로 대체되고 있는 추세인지 실무자 관점으로 솔직히 알려줘.
⭐ 이것만 기억하세요
정규표현식으로 패턴 사냥은 이 3가지만 확실히 잡으세요
1.re 모듈 4대 함수(match/search/findall/sub)와 명명된 그룹으로 로그 분석을 자동화할 수 있다
2.IP·이메일·API 키 패턴 정규식은 보안 사고 점검의 첫 단계 — 소스코드와 로그에서 민감 정보를 자동 탐지한다
3.다음 챕터에서 파일 I/O로 대용량 로그를 효율적으로 처리한다
공유하기
진행도 58 / 84