메뉴 건너뛰기

Hello :0

개요

작년 하반기 부터 Joomla jce editor관련 공격이 계속 발생하고 있다. 국내의 경우 joomla를 사용하는 곳이 많치 않아 피해가 크진 않아 보인다.

233F004155C3521A17239C

위 사진은 "leekyu.net"을 대상으로 공격이 시도된 통계이다. 사진상에는 일부만 있으나 IDS를 구축한 시점부터 꾸준히 탐지되고 있는 것을 볼 수 있다.

 

24476F4F55C3533835E3C0

 

줌라는 PHP로 작성된 오픈 소스 콘텐트 관리 시스템으로, MySQL 데이터베이스를 이용해 웹상에서 다양한 컨텐츠를 관리, 보관, 출판할 수 있는 기능을 갖고 있다. 라이선스는 GPL이며 다양한 언어를 함께 지원한다. 원래 줌라는 맘보라는 이름으로 개발되던 소프트웨어였는데 개발자 사이의 의견차에 의해 줌라로 분리되었다. 이에 따라 2005년 9월 맘보 4.5.2.3 버전이 줌라 1.0.0으로 다시 배포되었다. -위키백과-

 

2152D24355C354E72EEF8B  2419B14355C354E80B96A6

http://w3techs.com/technologies/overview/content_management/all의 통계에 따르면 전세계 홈페이지의 37%는 CMS를 사용하고 그 중 Joomla는 8.3%를 차지 하고 있다. 국내의 경우 Word Press와 XE를 가장 많이 사용하며, Joomla는 0.8%를 차지하며 거의 쓰이지 않는 것을 볼 수 있다.국내에서는 공격대상을 찾는 것도 쉽지 않아 보인다.

해당 취약점은 JCE editor에 의해 발생한다. JCE editor는 MS-Office처름 문서를 편집 할 수 있게 도와 주는 것으로 이미지의 업로드, 이름변경, 삭제, 잘라내기/복사/붙여넣기를 작성하는 글에 삽입 할 수 있게 해준다.

그 외에 글씨체, 크기, 정렬형태 변경과 같은 기능도 가지고 있다.  쉽게 생각하면 블로그에서 글 을 쓸 작성하는 에디터라고 보면된다.

 

2353B03755C357CA077445

[Default Editor]

2365BA3755C357CB34750F

[Jce Deitor]

위 사진에서 보듯이 Default Editor에 비해 jce Editor은 많은 기능을 가지고 있다. 취약한 버전은 exploit-db(https://www.exploit-db.com/exploits/17734/)에서 구할 수 있다.

 

공격도구 분석


<embed allowscriptaccess="never" enablecontextmenu="false" flashvars="&callbackId=leekyutistorycom24470&host=http://leekyu.tistory.com&embedCodeSrc=http%3A%2F%2Fleekyu.tistory.com%2Fplugin%2FCallBack_bootstrapper%3F%26src%3D%2F%2Fs1.daumcdn.net%2Fcfs.tistory%2Fresource%2F3074%2Fblog%2Fplugins%2FCallBack%2Fcallback%26id%3D2%26callbackId%3Dleekyutistorycom24470%26destDocId%3Dcallbacknestleekyutistorycom24470%26host%3Dhttp%3A%2F%2Fleekyu.tistory.com%26float%3Dleft" height="1" id="bootstrapperleekyutistorycom24470" src="http://leekyu.tistory.com/plugin/CallBack_bootstrapperSrc?nil_profile=tistory&nil_type=copied_post" swliveconnect="true" type="application/x-shockwave-flash" width="1" wmode="transparent">

해당 취약점은  2011-08-28에 공개되었고, JCE editor의 인증 없는 파일업로드 기능과 파일명 변경에 대한 문제가 있었다. 인터넷에 가장 많이 돌아다니는 Exploit은 PHP로 작성되었고,  해당 취약점을 이용해 Web Shell을 업로드 한다.

http://www.bugreport.ir/78/exploit.htm 에서 php와 perl버전의 exploit를 구할 수 있다. 먼저 공격 툴의 소스코드를 확인해 보겠다.

 

 

● 공격대상 설정과 Version 확인

2362C44455C35B1923BB18

 

- Exploit를 실행 시키면 html form에서 각각의 변수에 적절한 값이 확인 되었는지 확인하고, 빠진 부분이 있으면 에러가 발생

2271D64455C35B1B1CDD74

 

- 해당 버전이 취약한지 체크하기 위해 &packet 변수를 선언하고, sendpacket 함수에 적절한 변수를 넣고 호출

 

 

● sendpacket($packet,1,0,1)

221B514455C35B1C07EB70

 

- JCE Editord의 버전을 체크하는 부분으로 php의 foreach와 strops 함수를 사용해서 &star 배열안의 버전이 있는지 하나하나 체크한후 존재하면 Target patched메시지를 존재하지 않으면 Target is exploitable메시지를 출력한다. 

 

● 프락시를 이용한 Version 확인

241BC94455C35B1D07A393

2616824455C35B1E0A2A60

- Paros를 이용하여 버전 확인 구문을 동일 하게 요청 해보면 응답 값에 1.5.7.5 이라는 값을 확인 할 수 있다. 이런 식으로 버전을 체크 해서 공격을 시도 하는 경우도 있으나, 버전은 확인 하지 않고 바로 공격 단계로 가능 공격자도 보였다.

 

 

● 웹쉘 업로드 부분

246E044455C35B201D41BF

 

- 취약한 버전이 확인 될 경우 진행되고, 위 부분은 파일 업로드를 하기위한 페이로드 이다. $content부분은 GIF89a1+사용자가 업로드할 웹쉘파일 154번 줄에서 웹쉘이 삽입된다. 해당 툴은 사용자가 웹 쉘 파일을 실제 설정 해주 도록 하나, 봇을 통해 여러 사이트에 공격을 하는 경우는 한줄 웹 쉘을 삽입하는 것으로 보인다.

2218AD4455C35B2209583D

 

- $packet 변수 안에 전체 페이로드가 설정되면 다시 sendpacket 함수가 다시 실행된다.

2369DC4555C35B242B7397

- sendpacket($packet,0,0,0) 함수 실행

 

- 위의 경우는 그냥 단순 패킷만 전송하고 close

 

 

● 업로드된 파일의 확장자를 .gif -> .php 변환

2324C84555C35DDA1E785B

- JCE Editord의 취약점을 이용한 부분으로 188 줄의 명령어를 통해 파일의 확장자 명을 gif에서 php로 변경한다. 원래 파일 변경의 경우 fileRename명령어를 사용하나 적절한 검증이 이루어지지 않아 folderRename 명령어 조작을 통해 확장자 변경이 가능하다. 

 

 

● 파일 업로드 성공 여부 확인

252E6E4555C35B2709CC56

- Head method를 통해 /images/stories/0day.php 파일이 존재하는지 확인하기 위한 Payload 설정

2416E14555C35B29152640

 

- Payload를 전달하고 그에 대한 응답 값을 확인 하기 위해, &html변수에 응답을 저장

2723E84B55C35E942C541D

- 위에서 저장한 &html 안에 200 OK 가 있으면 Exploit Succeeded…와 웹쉘이 업로드된 경로 출력

 

 

● 공격도구 사용시의 와이어 샤크 캡쳐

240CB54555C35B2B1B71C3

 

취약점 분석

 

 

● 취약점 1 

 

256E454955C35FE926E86D

 

- 위의 소스코드는 JCE Editor 에서 파일을 올릴 때 사용하는 upload 함수로써, 원래대로라면 로그인한 사용자에 대해서만 사용 가능해야 하나, 접근 권한에 대한 적절한 처리가 이루어지지 않아 누구든지 사용이 가능하다.

2216814955C35FEB11ED1E

2128CD4955C35FED08A5BE

 

- 권한 없는 사용자의 접근을 막기위해 소스코드를 패치한다. $user =Jfactory::getUser(); 부분은 Joomla에서 제공하는 API로 사용자에 대한 정보를 구하는 함수 이다. 위 함수를 이용해 guest인 경우 die함수로 종료 되도록 한다.  

 

222BBC4955C35FEF06DB81

- 해당 패치를 한 후 Exploit를 사용한 경우, 접근에 대해 메시지를 보내고, 종료되면서 공격이 실패 되는 것을 확인 할 수 있다.

 

247E874955C35FF01EC3A7

 

- 로그인 후 정상적인 방법으로 업로드를 하는 경우 그림 파일이 제대로 올라간다.

 

● 취약점 2

27052E4955C35FF11A9826

- 정상적으로 파일을 변경할려면 fileRename 함수를 써야하나 해커는 패킷을 변조하여 floderRename 함수로 파일명을 바꾼다. 이를 방지하기 위해 folderRename 함수에 대해 인터넷에서 돌아다니는 확장자 검색 방법을 사용하기 위해 소스코드를 수정한다.   

262A834955C35FF20756B4

- 위 소스코드와 비슷한 형태로 소스코드를 수정하겠다.

263C1E4755C35FF4348776

- folderRename 명령어를 사용했을 때 ".php" 문자열이 들어가면 확실한 공격으로 판단하고 die명령어 실행

- 문자열중 "."이 있으면 "-" 문자열로 치환 하도록 소스코드를 변경 

두가지 형태로 공격을 막도록 하였다.

 

2221744755C35FF70291EC

2139474755C35FF938EF66

262F414755C35FFB3CB670

- 1번째 방법의 folderRename 명령어가 실행될때 .php가 있으면 종료되어서 0day.gif 확장자가 그대로인 것을 확인 할 수 있따.

 

2165D34755C35FFC2258A3

26745F4755C35FFE199D40

211A644755C35FFF0713FA

232E7E5055C360002632DB

-2 번째 방법의 "."이 들어간 경우 명령어가 실행되면 "-"로 치환 되어 파일 실행이 불가능 하다.

 

● Snort Rules

alert tcp any any -> any any (msg:"Joomla_JCE_Editor_2.0.10_Version_Check(step1)";content:"GET"; nocase; content:"/index.php?option=com_jce&task=plugin&plugin=imgmanager&file=imgmanager&version"; nocase; sid:110000007; rev:1;)

alert tcp any any -> any any (msg:"Joomla_JCE_Editor_2.0.10_File_Upload(step2)"; content:"POST"; nocase; content:"/index.php?option=com_jce&task=plugin&plugin=imgmanager&file=imgmanager"; nocase;  content:"Content-Type: multipart/form-data"; nocase; sid:110000008; rev:1;)

alert tcp any any -> any any (msg:"Joomla_JCE_Editor_2.0.10_File_Change(step3)"; content:"POST";nocase;  pcre:"/json=\{\"fn\":\"folderRename\",\"args\":\[\".+\",\".+\.[p|P][h|H][p|P](.+)*\"\]\}/i"; sid:110000009; rev:1;)

alert tcp any any -> any any (msg:"Joomla_JCE_Editro_2.0.10_Shell_Excute(Step4)"; content:"GET"; nocase; pcre:"/\/images\/stories.+\.[pP][hH][pP](.+)*/i"; sid:110000010; rev:1;)

 

현재는 패치가 나와있고, 국내에서 많이 사용하지 않으므로 큰 영향은 없다고 판단됨.