정규 표현식은 특정 규칙을 가진 문자열의 집합을 표현하는 형식적 언어이다.
특정한 패턴을 가진 문자열을 탐색할때 주로 이용하며, 대표적으로 IDS나 방화벽에서 특정 패턴을 탐지하는 정책을 설정할때 많이 사용한다.
위의 사이트에서 정규표현식을 입력해보며 탐지가 잘 되는지 확인할 수 있다.
1. ^[문자]
[문자]로 시작하는 문자열 탐색
ex) ^abc => abc123, abc234, abc567 (탐지됨) / 1abc (탐지안됨)
2. [문자]$
[문자]로 끝나는 문자열 탐색
ex) ^abc => 1abc, 2abc, 123abc (탐지됨) / 1abc23, abc23 (탐지안됨)
3. [문자]+
1개 이상의 [문자] 다 탐지
ex) 1+ => 1, 111, 1111111 (탐지됨)
4. .
.은 숫자든 문자든 모든 임의의 문자를 나타냄.
ex) . => 123, k, hi, world, juntheworld (탐지됨)
5. [문자]*
[문자]*은 해당 문자가 몇개가 오든 다 탐지
ex) A* => A, AAAAA, AAAAAAAAAA (탐지됨)
6. ([문자1] | [문자2] | [문자3])
( [문자1] | [문자2] | [문자3]) 에서 | 는 or의 의미
ex) (com|org|net) => com, org, net (탐지됨)
7. ([0-9])
([0-9])는 0부터 9까지 아무숫자나
ex) 1,2,3,4,5,6,7,8,9,0 (탐지됨)
8. ([0-9]){[자릿수]}
([0-9]){[자릿수]}는 0부터 9까지 아무숫자로 구성된 [자릿수]를 만족하는 숫자
ex) ([0-9]){2} => 12,34,56,78,90 (탐지됨) / 123, 1, 5789, 576 (탐지안됨)
9. \[메타문자]
\[메타문자]는 정규표현식에서 특정 의미를 가지도록 약속된 문자 (^,*,+...)를 문자 그자체로 사용하고 싶을때 사용
ex) 1\+2 => 1+2 (탐지됨) / 1111112 (탐지안됨)
주의사항
- 정규 표현식을 사용할때 너무 핏한 설정을 주게되면 놓치는 경우가 발생하고, 너무 루즈한 설정을 주게되면 쓰레기 값이 많이 탐지된다. 이에 탐지하고자 하는 패턴에 최적화된 정규표현식을 찾는 것이 중요하다.
- IDS, 방화벽등 보안 장비 정책을 수립할때에 인코딩된 경우와 운영체제별 표현차이(리눅스 - 경로 표현시 / 윈도우 - 경로 표현시 \)를 모두 반영해야한다. (공백문자 => (\x20|%20) / 슬래시(/) => (\/|%2F|%5c))
'공부 > 이모저모' 카테고리의 다른 글
C언어 배열이름에 &붙이는 경우(&배열이름??) (0) | 2021.10.19 |
---|---|
행렬의 덧셈과 곱셈 (행렬이란? 행이란 열이란) (0) | 2021.10.18 |
주요 포트번호 및 서비스 정리 (FTP,HTTP,SSH,텔넷,SMTP...) (0) | 2021.10.01 |
리눅스 계정 구조 / 사용자 정보 구조 / 파일 딕셔너리 권한 (etc/passwd 구조, etc/shadow구조) (0) | 2021.09.17 |
윈도우 인증의 구성 요소 (LSA, SAM, SRM) (0) | 2021.09.17 |