RegEx 관련 생성기, 도우미, 검증기
RegEx 관련 생성기와 검증기를 좀 찾아 본 결과를 그냥 적음
오픈소스나 웹 기반으로 된 것들을 몇가지 찾아 봤는데, 괜찮아 보이는 부분 정도 기술
1. RegEx 생성기 ( regexgen )
https://github.com/devongovett/regexgen
설명: 문자열 리스트를 입력 받아서 그 안에서 pcre 형태의 문법을 만들어 준다.
장점: 특정 문자열 입력을 하면 공통 패턴 위주로 pcre를 생성 해 준다.
단점: 무조건 다 맞는 것을 생성하려고 하기 때문에 강제로 "|" 되어 모든게 겹치는게 들어가거나 한다.
예제1
# node ./node_modules/regexgen/bin/cli.js 'aaa' 'aaabbb'
/aaa(?:bbb)?/
예제2: or 처리 되버리는 부분
# node ./node_modules/regexgen/bin/cli.js 'aaa' 'bbb'
/bbb|aaa/
예제3: 여러개를 합치는 건 가능
# node ./node_modules/regexgen/bin/cli.js 'aaafg' 'aaefg' 'aadfg'
/aa[ade]fg/
예제4: 반복문까진 안해 주는 듯 함
# node ./node_modules/regexgen/bin/cli.js 'aaafg' 'aaafgaaafg' 'aaafgaaafgaaafg'
/aaafg(?:aaafg(?:aaafg)?)?/
2. Snort Rule Generation
소스: https://github.com/Aksh97/Snort_rule.git
설명: pcap을 바로 읽어서 공통 content 를 추출 한다.
장점: 공통 content 를 추출한 snort 정책을 생성 해 준다.
단점: content만 추출 해 주고, 기본적으로 고정크기 (8 byte)만 해 준다. (코드를 수정하면 고정된 8 byte를 다른 크기로 변경은 가능하나 코드 변경 필요). 전체 공통 패턴을 추출하는 부분은 부족함.
구동화면
wireshark 검증용 코드
import sys
def main():
# 인자 받기
arg = sys.argv[1]
# 2바이트씩 문자열 분할
chunks = [arg[i:i+2] for i in range(0, len(arg), 2)]
# : 추가하여 출력
print("frame contains " + ":".join(chunks))
if __name__ == "__main__":
main()
다음과 같은 문구로 wireshark 에서 검증해서 보면 pcap에서 추출은 된 것으로 보임
# python ext.py 132d325a951e15b9
frame contains 13:2d:32:5a:95:1e:15:b9
3. snort 정책 생성 도우미 사이트
4. RegEx 다이어그램 처리
1) debuggex
예제사용 RegEx : [a-z]{1,3}[abcdefgABCDEFG]{0,4}ccccc[1234]{1,3}
2) regexper
샘플사이트:
소스 (MIT): https://gitlab.com/javallone/regexper-static
예제사용 RegEx : [a-z]{1,3}[abcdefgABCDEFG]{0,4}ccccc[1234]{1,3}