Search

'고전해킹'에 해당되는 글 1건

  1. 2014.10.17 CVE-2013-4011 AIX InfiniBand 취약점을 통해 본 고전해킹

날씨가 많이 쌀쌀해진 10월입니다..

요즘은 아침과 한 낮의 온도차가 너무 심하네요.. ^^;

간절기에 모두들 건강하신지 모르겠습니다


오늘은 모의해킹 도중 있었던 일로 한번쯤은 되짚어 보고 넘어가 봐야 하는 것들이 아닌가 해서 한번 올려봅니다..


저희 TeamCR@K에서는 신입팀원들에게 모의해킹 시 주의사항에 대해 교육을 하는데요.

SQL Injection 시도 시 UPDATE, DELETE, CREATE, INSERT 등의 SQL 구문 실행 금지 항목도 있고..

여러 항목들 중 하나가 "Exploit 실행 금지" 항목입니다.

사실, Exploit 실행 금지에 대해 여러 의견이 많습니다.


해당 항목이 존재하는 제일 첫번째의 이유는 아무래도 "고객사 서버의 안정성"이겠네요..

고전해킹으로 분류되는 Race Condition과 같은 기법은 노후화 된 장비에 무리를 줄 수 있고,  Server Daemon을 공격하는 Remote Exploit의 경우 대고객 서비스에 장애를 일으킬지 모르며, 더 나아가 결제와 관련된 시스템일 경우 그 피해는 상상을 초월할테니까요..

또한 최근 리눅스 계열 배포판에서 많이 도출되는 취약점의 경우는 Kernel Exploit 들이 많습니다.

Kernel Exploit의 경우 실행결과가 Crash로 나타나는 형태가 많기 때문에 Kernel Panic으로 인한 실 서버 다운 등의 사태로 이어질 수 있어 이를 금지하고 있습니다.


Exploit 실행을 금지하는 또 하나 지적되는 문제로서는 Script Kiddies와도 관련이 깊을것이라 추측하고 있습니다.

쉽게 이야기하자면 "Exploit Code를 이해하지 못하는 수행인원으로부터 나오는 위험성"이겠네요.

Exploit의 취약점을 이해하지 못하고(하려 하지도 않고) Exploit 하는 행위만을 학습하는 결과가 아닐까 생각됩니다.

그 결과, 고객사 서버 안정성에 위해를 가하는 것으로 귀결될테니까요..


어찌됐든 지난 주 AIX 시스템에 접근할 기회가 생겼습니다.

일반 사용자 권한이었기에 시스템 관리 권한을 획득하기 위해 고객사에 양해를 구한 후 CVE-2013-4011에 해당하는 취약점을 공격하여 root 권한을 획득하였습니다.


[그림 1] CVE-2013-4011 취약점 공격


취약점이 존재하는 명령어는 /usr/sbin/ibstat 명령어로, 이는 root의 SetUID bit가 적용되어 있는 명령어입니다. ibstat 프로그램은 "arp"라는 외부 명령어를 실행하는데, 이 때 "arp"가 SheBang 형태로 실행되기 때문에 프로그램 실행 경로인 PATH 환경변수를 조작하여 제작자가 의도한 "arp" 프로그램 대신 악의적으로 생성한 프로그램을 실행하도록 할 수 있습니다.


해당 취약점은 이미 2013년에 IBM에서 공식적인 보안패치를 공개한 취약점입니다.


http://www-01.ibm.com/support/docview.wss?uid=isg1SSRVPOAIX61SECURITY130716-1109


PATH를 조작하여 상위권한을 획득하는 형태의 Exploit은 주로 외부 프로그램을 실행할 때 system이나 popen 등의 함수를 사용하는데에서 기인합니다.

다음의 그림에서 보시는 경우도 같은 맥락입니다.


[그림 2] 외부프로그램 실행의 예


위 프로그램을 strace로 분석하면 다음과 같습니다.


[그림 3] 외부프로그램 실행 순서


PATH의 구분자는 ':' 문자이며, 왼쪽에 설정되어 있는 PATH일수록 우선순위가 높습니다.

"[그림 2] 외부프로그램 실행의 예" 그림에 나와있는대로 PATH설정을 할 경우 PATH는 다음과 같은 형태로 설정됩니다.


.:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/indra/bin


맨 왼쪽에 설정되어 있는 PATH가 . (현재디렉터리)이므로 현재디렉터리에 있는 "sh"나 "ls"를 먼저 찾게 됩니다.

PATH는 사용자가 지정할 수 있는 환경변수이며, system 계열의 함수는 이러한 PATH 환경변수의 특성을 타게 되는데

악의적인 사용자의 조작된 PATH에 의해 공격에 노출되는 경우입니다. 


예전에 워게임이라는 레벨별 시스템 해킹 게임이 유행할때, 해커스랩 FHZ이라는 워게임이 있었습니다.

"뚫어볼테면 뚫어봐!"라는 의미로 서버 이름도 DRILL서버로 명명했던 것이 기억이 납니다.

그 당시 해커스랩 워게임 레벨 문제에 이와 같이 PATH 환경변수를 조작하여 푸는 문제가 있던 것으로 기억됩니다. 

지금으로부터 15년쯤전이니까.. 시간이 많이 흘렀네요..


현재의 리눅스 배포판들은 이러한 형태의 취약점은 거의 존재하지 않습니다.

물론 일반 웹 어플리케이션은 지금도 보안취약점이 발견되어 패치되고 있지만 기본 탑재되는 시스템 어플리케이션에 한정해서는

환경변수의 조작 (PATH/IFS), 특수문자의 사용 (;, |, `)  등으로 인한 소위 "고전 해킹" 방법에 의한 보안취약점 노출은 많이 줄어들었습니다.

해커스랩 워게임을 즐겨하고 시스템 분석을 좋아하던 시절, IBM의 AIX나 HP-UX, Irix, Tru64 등등은 욕망(?)의 대상이었습니다.

일반인들은 당연히 접근하지 못하는 시스템이었고, 보안권고문 같은 곳에서만 그 흔적을 찾을 수 있었을 뿐.. Unix 클론인 리눅스에 만족할 수 밖에 없던 시절이라고 기억됩니다.


고전해킹으로 분류되는 기법이 현재 발견되는 보안취약점에도 활용 될 수 있다는 사실에는 만감이 교차합니다.

여타 Unix 시스템들은 지금도 접근하기 쉽지 않다는 그 특수성에 의해 분석되기 쉽지 않다는 이유와 함께..

현재의 리눅스 시스템은 오히려 사람들 앞에 오픈되어 수 많은 리눅스 관련 어플리케이션 개발자, 커널 커미터, Errata 버그 보고자들의 노력으로 이뤄진 성과가 아닐까 싶기도 합니다.


뚫는 것 보다 막는 것이 어렵다.. 라는 것을 다시 한번 느끼기도 하면서 수 많은 리눅스 관련 개발자들에게 다시한번 경외심이 드는 케이스가 아닐까 합니다.. ^^