공부/이모저모

정규 표현식 (Regular Expression)

JUNFUTURE 2021. 9. 17. 04:22

정규 표현식은 특정 규칙을 가진 문자열의 집합을 표현하는 형식적 언어이다.

특정한 패턴을 가진 문자열을 탐색할때 주로 이용하며, 대표적으로 IDS나 방화벽에서 특정 패턴을 탐지하는 정책을 설정할때 많이 사용한다.

https://regexr.com

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

위의 사이트에서 정규표현식을 입력해보며 탐지가 잘 되는지 확인할 수 있다.

 

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))