CryptoPHP(CMS Backdoor)

 

 

 

작성일: 2014년 12월 28일

작성자: juwon1405

E-mail: hotyougo@naver.com

Proprietary & Confidential






01. 개요

1. ISSUE 정보

  • CryptoPHP Backdoor In Plugins and Themes

     

  • 최근 각종 정보보안 포럼, 뉴스 등에 기재된 기사에 따르면, 2만 3,000개 이상의 웹서버가 CryptoPHP라는 이름의 Backdoor에 감염되었다고 보도 되었다. Fox-IT Security의 위협보고서에 따르면, 최근 2014년 11월 12일 WordPress, Joomla, Drupal 과 같은 콘텐츠 관리 시스템(CMS)을 대상으로 하는 Backdoor로써 인기 콘텐츠 관리시스템(CMS)용 테마 및 플러그인 해적판에 내장돼 확산된 것으로 관측된다.
  • 해당 Backdoor는 CMS의 Theme나 Plug-in에 심어지고 적용할 시 동작한다. 이때 활용되는 멀웨어의 이름이 CryptoPHP(CryptoPHP)라고 한다. CryptoPHP는 처음 2014년 9월 25일 처음 발견되었으며, 당시 버전은 0.1 이었고, 현재 발견된 버전은 1.0a로 업그레이드 된 것을 확인 할 수 있었다.
  • 한국에서는 그리 사용자가 많지는 않은 서비스라 다행이지만 외국에서는 이들의 플랫폼을 활용한 사이트들이 굉장히 많아 여파가 큰 이슈로 확인되었다. 지역별 감염 순위는 미국(8,657 IP 어드레스), 독일(2,877), 프랑스(1,231), 네덜란드(1,008), 터키(749) 순이었다

     

  • CryptoPHP는 일종의 악성 스크립트로, 공격자가 원격에서 악성 코드를 실행할 수 있게 한다. 또 감염 웹 서버 상의 웹사이트에 악성 콘텐츠를 노출할 수 있게 해준다.
  • 이번 Backdoor가 주로 사용된 용도가 있다. 블랙 햇 검색 엔진 최적화(BlackHat SEO)가 그것이다. 악성 키워드와 페이지를 감염 사이트에 주입함으로써 감염 사이트의 검색 엔진 순위를 가로채 악성 콘텐츠를 검색 결과 상위에 올려놓는 용도였다.
  • (참고 1: http://www.blackhatworld.com/blackhat-seo/f1-black-hat-seo/ )
  •  

    CryptoPHP가 다른 웹사이트 백도어와 차별화되는 특징은 취약점을 통해 설치된 것이 아니라는 사실이다. 공격자들은 줌라(Joomla), 워드프레스( WordPress), 드루팔(Drupal)용 플러그인 및 테마 상용 제품 해적판을 만들고 웹서버 관리자들이 이를 다운로드 하도록 기다렸다. 해적판이 설치되면 여기에 내장된 CryptoPHP가 동작을 개시했다.

    CryptoPHP에 감염된 웹 서버들은 봇넷으로도 기능했다. 공격자들이 운영하는 통제 서버과 암호화된 소통 채널을 통해 연결됐다.

     

    Fox-IT Security 측은 지난 주 대응 방안을 다룬 보고서를 발간함에 따라 공격자들이 감지를 피하기 위해 백도어 신버전을 배포했다고 전했다. 회사는 웹마스터들이 서버와 사이트를 스캔해 CryptoPHP 감염을 확인할 수 있는 파이썬 스크립트 2종을 깃허브에 게재한 상태다.

     

    (감염여부 스캔 스크립트 배포 깃 허브 참고: https://github.com/fox-it/cryptophp/tree/master/scripts )

     

     

      

     

    2. ISSUE 관련 위험성

  • 해당 ISSUE의 위험성은 대중적인 CMS의 신규 취약점이나, 새로운 해킹기술을 사용하여 침투 및 악성코드를 배포하는 방식이 아닌,

    CMS의 테마, 플러그인 등의 해적판(유료 테마, 플러그인 등을 불법적으로 무료 또는 저렴한 금액으로 배포하는 버전)을 제공하는 사이트를 구축하고 테마나, 플러그인에 악성코드를 심고, 해당 플랫폼 사용자로 하여금 본인 스스로 해적판을 다운받게 하는 사람의 "공짜" 심리를 악용, 요혹하는 방법이다. 따라서, 그 피해 규모를 모두 파악할 순 없지만 피해자의 수가 2만 3,000개의 이상의 웹서버 라는 걸 예측 한다면 감염된 웹 서버를 통해 DDoS공격이나, 2차 3차 침투 공격 등등 위험성의 지수는 기하 급수적으로 늘 것으로 관측된다.

     

     

    3. ISSUE Report: Fox-IT Security

  • 해당 ISSUE를 처음 발견하고 보고한 네덜란드의 보안기업 Fox-IT Security 보고서의 내용에 따르면 다음과 같다.

    (CryptoPHP Whitepaper: https://foxitsecurity.files.wordpress.com/2014/11/cryptophp-whitepaper-foxsrt-v4.pdf )

     

  • Fox-IT Security 의 연구원이 몇 달전 의심스러운 트래픽을 생성하는 고객의 웹 서버를 발견했다.

    CMS를 호스팅하는 웹서버가 외부 서버로 HTTP POST 요청을 수행하기 시작했다.

     

    해당 웹서버 로그를 확인한 결과 다음과 같은 로그를 확인 할 수 있었다.

     

     

  • 해당 웹서버를 좀더 자세히 관찰하기 위하여 네트워크 트래픽을 확인한 결과 의심스러운 트래픽을 확인 할 수 있었다.

    위 패킷에서 의심스러웠던 점은 다음과 같다.

  1. No referrer
  2. No User Agent
  3. HTTP POST is toward a BIZ domain

웹 서버는 때때로 외부 서버에 POST 요청을 수행하지만, 이러한 요청은 정상적인 HTTP 헤더를 결여해서 보내는 것은 드문 일이었다.

더 흥미로운 점은 패킷 스트림을 확인해 보니, 암호화 된 데이터를 포함하는 모양의 POST 데이터 였다.

 

Fox-IT Security 연구원은 이런 의심스러운 트래픽이 왜 발생하는지에 대한 의문점을 가지고, 현재 발생하는 이전 트래픽 에서

어떠한 실마리를 찾으려 했지만, 특이사항은 없었던 것으로 확인되었다.

일반적으로 이런식의 의심스러운 트래픽을 발생시키는 웹서버에는 특이 취약점이나, 해킹의 흔적이 있기 마련인데, 이번 Case는 달랐다.

 

해당 웹서버 추가 검사를 통해서 HTTP POST 요청이 발생하기 전에, 관리자가 Joomla Instance의 플러그인을 정상적으로 설치한 것을 확인하였다. 해당 설치과정 중 로그인은 합법적이었고, 도난된 자격증명도 아니었음을 확인했다. 다시 말해 정상적인 플러그인 설치다.

네트워크 데이터에서 플러그인 파일을 추출 한 뒤, 요청 된 HTTP POST와의 관계를 알고자 분석하였다.

분석결과 관리자가 설치한 해당 플러그인 에서 Backdoor가 확인되었다.

 

  • 해당 Backdoor가 어떠한 위협을 가하는지 좀더 심층적인 분석을 수행한 결과 해당 Backdoor의 이름을 찾을 수 있었다.

    이 Backdoor는 통신을 암호화 하기 위해 RSA공개키 암호화를 사용하는 CryptoPHP라는 것을 알 수 있었다.

     

    해당 플러그인을 다운받은 사이트를 찾을수 있었고, 해당 플러그인 아카이브 ZIP파일의 URL을 찾을 수 있었다.

    ZIP파일 내에 는 다음과 같은 코멘트가 있었다.

    이는 Joomla의 공식적인 서비스공급자 에서 다운받는 것이 아니며, 불법 복제, 해적판 라이선스임을 확인 할 수 있었다.

     

       

  • 확인된 악성프러그인 배포 사이트를 확인 한 결과, 플러그인이 해당 웹사이트로부터 무료로 다운 받을 수 있었고,

    Backdoor가 심어진 줌라(Joomla)뿐 아니라 워드프레스( WordPress), 드루팔(Drupal)용 플러그인 및 테마를 확인 할 수 있었다.

    (악성 테마, 플러그인 유포지: hxxp://nulledstylez.com/ )

    위 URL은 hxxp로 입력 하였기 때문에, 하이퍼텍스트 기능은 없습니다.

    해당 사이트에서 학습목적으로 다운받아 분석하는 것은 자유지만 주의 하시기 바랍니다.

      

  • 다운받은 플러그인 ZIP파일 내부에서 타임 스탬프(생성일자)가 다른 2개의 파일을 확인할 수 있었다.

     

      

    위 두개의 파일 생성일자가 다른 파일과 달리 최근에 생성되었다는 것을 기초로 분석을 한 결과,

    Jsecure.php의 코드 가장 하단에 social.png 라는 이미지 파일을 Include시키는 것을 확인 할 수 있었고,

     

      

    Social.png 파일을 확인 한 결과, 정상적인 png 이미지 헤더가 아닌 php파일의 소스코드를 담고 있었다.

    즉 Social.png가 CryptoPHP Backdoor로 동작하는 것을 확인 할 수 있다.

     

    해당 nulledstylez 사이트 에서 악성 플러그인, 테마 들을 다운받아 조사 하던 중, ZIP파일 내부에서 nulledstylez 뿐 아니라

    다른 악성코드 유포지로 의심가는 문구를 확인 하였고, "nulledstylez.com" 라는 도메인 사이트 또한 악성코드 유포지로 확인할 수 있었다.

     

     

    해당 dailynulled.com 사이트 역시 조사결과,

    nulledstylez.com 와 아주 유사한 사이트 이었고, 업로드 된 파일의 다운로드 사이트 또한 동일한 사이트로 확인되었다.

 

   

  • 이와 2개의 사이트와 함께 CryptoPHP 관련되어 배포하는 약 20개의 사이트를 확인 할 수 있었다.

     

  • 위 20개의 사이트를 통해 다운로드 되는 링크 사이트는 2곳임을 확인 할 수 있었다.

     

     

  • CryptoPHP Backdoor 특징
  1. CMS Framework의 기능을 사용 (영향 받는 CMS: Joomla, WordPress, Drupal)
  2. CMS Database를 사용(탈취)
  3. C2(CnC) 서버와의 공개키 기반 암호화 통신을 사용
  4. 단순히 하나의 C2서버와의 통신이 아닌 대량의 C2서버를 이용
  5. 오래된 버전의 Email 통신의 현태로, 백업 메커니즘을 포함
  6. 감염된 웹 서버에 대하여 자동적인 악성행위 외에도, 수동 제어기능
  7. 원격으로 C2 서버들의 업데이트 기능
  8. 자동으로 업데이트 할 수 있는 기능
  9. 웹 페이지에 내용을 주입(Backdoor의 실행을 위한 php페이지 내의 Content injection)
  10. 코드 실행(social.png 파일의 코드실행)

     

  • CryptoPHP Backdoor 파일 기본 구조

    "dailynulled.com"에서 다운받은 WordPress의 Plugin인 "WooCommerce Advance Order Status v1.1(주문 현황 뷰어 플러그인)"을

    분석 해 본 결과는 다음과 같다.

     

    해당 플러그인의 첫 번째 ZIP파일 압축을 풀어보면,

    다음과 같이 사용설명서, 라이선스 와 함께 정상적인 플러그인 파일과 동일한 구조를 가진다.

     

    해당 플러그인의 두 번째 ZIP파일 압축을 풀어보면,

    다음과 같이 초기 사건에서 발견할 수 있는 파일의 타임스탬프가 다른 두 개의 파일을 확인 할 수 있었다.

     

    "dhwc-product-lavels.php" 파일을 열어보면 보통 WordPress 플러그인 파일의 구성과 동일한 모습을 볼 수 있었다.

     

     

    하지만, 맨 아래의 코드를 보면 다음과 같이 일반적인 WordPress 플러그인 메인 php파일에는 없는 내용을 확인할 수 있었다.

     

    이는 플러그인이 실행될 때, social.png라는 파일을 include시키는데,

    Social.png 파일을 editor프로그램으로 열어보면 Backdoor 버전까지 확인 할 수 있다.

     

    이를 통해, 해당 Backdoor의 버전이 1.0a라는 것을 확인하였고, 검색을 통한 탐지를 회피하기 위해, 등록된 User가아닌 방문자가 해당 WordPress 웹 사이트를 방문할 시에 동작하는 것을 확인 할 수 있었다.

     

    CMS 통합 기능: Joomla, WordPress, Drupal와 같은 CMS의 기능은 모두 다르다, 따라서 Backdoor는 어떠한 CMS에서도 작동하기 위해서 3개의 CMS환경에 모두 적용이 가능하게끔 설계되어있다.

    예를들어 해당 Backdoor는 WordPress의 add_action 기능을 이용한 echo injection을 사용 함을 코드에서 확인 할 수 있다.

     

    Joomla의 경우에는 JResponse:getBody()와 JResponse:setBody() 함수를 사용하는 코드가 모두 함께 내포되어 있다.

     

    CMS 통합 기능: Joomla, WordPress, Drupal와 같은 CMS의 기능은 모두 다르다, 따라서 Backdoor는 어떠한 CMS에서도 작동하기위해서 3개의 CMS환경에 모두 적용이 가능하게끔 설계되어있다.

    예를들어 해당 Backdoor는 WordPress의 add_action 기능을 이용한 echo injection을 사용 함을 코드에서 확인 할 수 있다.

     

    하지만, Drupal 같은 경우는 워낙 코드의 복잡성과 WordPress와 Joomla와는 다른 구조이므로 해당 CryptoPHP Backdoor의 기능이 제한적일 것으로 판단된다.

      

     

  • CryptoPHP Backdoor 관리자 계정 생성

    Backdoor가 WordPress 플러그인이나, 테마와함께 설치가 되면, 별도의 관리자 계정을 추가 생성 한다.

    이는, Backdoor를 제거 할 것 웹 사이트에 대한 액세스를 유지하기 위한 것으로 판단된다.

    기본적으로 별도의 생성되는 관리자 계정명은 'System' 이지만 이름이 해당 계정이 있을 경우는, 'System'뒤에 번호를 붙여

    등록이 될 때까지 while문을 돌린다. 이와 같이 관리자 계정 명뿐 아니라 등록할 Email 주소에도 같은 로직으로 짜여 있다.

     

      

  • CryptoPHP Backdoor 암호화 통신

    CrtyptoPHP는 임베디드 RSA 공개 키를 사용하여 C2(CnC)서버와 통신한다. 통신 암호화는 PHP Openssl_seal의 RC4 암호화 한뒤, RSA 공개 키를 생성한다.

    Backdoor의 첫 번째 버전 (0.1)은 1024bit RSA Key 이었지만, 최근 발견된 버전(1.0a)에서는 2048 bit RSA 키를 생성하도록 업그레이드 된 모습을 확인 할 수 있었다.

    Backdoor는 C2서버와 통신 할 수 있도록 첫번째 초기화 시에 임의의 10문자 Server Key와, 추가 RSA 키 쌍을 생성 하고,

    공개 Key는 C2 서버로 전송된다. 이를 통해 C2서버는 감염된 서버를 조종 할 수 있는 일종의 Token이 생기게 된다.

     

    해당 C2서버로 전송될 때에, Backdoor가 설치된 날짜, 마지막 접속일자, 버전 정보, 접속 횟수 등의 정보를 함께 보낸다.

     

    만약, C2 서버와 성공적으로 연결되면, C2 서버측에서는 Server Key의 MD5 Hash 값을 리턴한다.

    이를 통해 Backdoor는 성공적으로 연결됨을 인지하는 구조이다. 이런 방법으로 C2서버와 통신을 체크하는 주기는 1일로 설정되어 있지만,

    위에서 언급 했던 Server Key를 사용하여 수동제어를 강제적으로 할 수 있다.

      

  • CryptoPHP Backdoor Domain Randomized

    CryptoPHP는 하드코딩된 Domain List가 있는데,

    감염된 서버의 도메인 List를 다음 코드와 같이 램덤 화 시키고, 도메인 명을 MD5로 단방향 암호화 시켜 추적을 피한다.

      

      

  • CryptoPHP Backdoor Manual Control

    서버 키를 생성하여 수동으로 Backdoor를 조작하는 것 또한 가능하며, 현재는 "update"와 "reset"명령어를 지원한다.

    예를 들면, C2 Server에서 감염된 웹 사이트로 다음과 같은 HTTP 요청을 통해 새로운 Check-In을 수동으로 할 수 있다.

     

    또는, 다른 C2 Server로의 연결을 수동으로 요청할 수도 있다.

     

     

  • CryptoPHP Backdoor Configuration

    C2 Server는 Backdoor의 설정 또한 다음 코드와 같이 변경 / 업데이트 할 수 있다. (retrun JSON)

     

    Backdoor에서는 이와 같이 로컬 설정을 변경한다.

    설정을 업데이트 한 후에, 생성한 RSA Key 쌍을 이용하여 각각의 CMS에 맞게 암호화 하여 저장된다.

      

  • CryptoPHP Backdoor Backup communication

    기존의 Crypto Backdoor와 최근 발견된 Backdoor는 암호화 된 데이터를 curl_exec 함수를 사용하여 전송한다.

    또한, curl_exec 함수를 사용할 수 없을 경우에, fsokopen함수를 이용하며, C2 Server와의 연결이 여러 번 실패 할 경우,

    이메일을 통해 암호화된 데이터를 전송 할 수 있도록 설계되어 있다. 하지만 이 기능은 최신 버전 1.0a 에서는 제거 되었다.

     

  • CryptoPHP Backdoor 의 목적 : Blackhat SEO

    침해(감염)된 웹 서버에서 eval, echo 함수들을 사용하여 주입된 Link와 text들을 확인하여 해당 Backdoor의 최종 목적을 알 수 있었다.

    아래의 소스코드를 보면, User Agent, Hostname 등을 기반으로 방문자가 Web Crawler 일 경우에만, True를 반환 한다.

    (이해를 돕기 위한 구글 동영상 참고: https://www.youtube.com/watch?v=lG5lOix9b9k )

     

    다시 말해, 일반 사용자가 방문 할 경우에는 정상 사이트처럼 아무 반응이 없지만, Web Crawler가 해당 침해된 사이트를 방문 할 경우에는

    Bot이 작동한다. 즉, 주입된 Link나 Text를 보여주게 된다. 이렇게 되면 사용자나, 침해 웹 서버 관리자는 검색 엔진이나 웹사이트 방문을 통해서는 해당 웹 서버가 침해를 당했는지에 대한 여부를 육안으로 식별하기 힘들다.

    또한 이렇게 Web Crawler가 방문 하였을 때만 주입된 Link, text를 보여주는 이유는, 해커가 주입한 URL등의 검색 엔진 결과에서 나오는 순위를 올리기 위함이다. 만일, 유명하고 인기 있는 사이트를 해킹하여 이러한 기법을 이용한다면 참조되는 Link는 Web Crawler에 의해 좋은 순위를 얻을 수 있고, 이런 결과를 통해서 사업적 이득이나 또 다른 파밍 사이트로 유도 할 수 있게 된다.

    이러한 사기성 기법은 클로킹 이라고도 하며, BlackhatSEO(Search Engine Optimization)으로도 알려졌다.

     

    페이지 순위를 결정짓는 요소 중 하나는 페이지로 연결되는 수신 링크의 수와 품질이다. 이는, 페이지의 신뢰성과 권리를 높이는데, 그 이유는 외부 리소스로 연결되는 링크가 추가되는 것이 콘텐츠를 보증하는 것과 같기 때문이다.

     

    사이버범죄자가 좋은 웹사이트를 해킹한 다음 자신의 사이트로 연결되는 링크를 추가하여 순위 신호를 조작하는데,

    이 CryptoBackdoor의 소스코드 분석결과 이와 같은 궁극적인 목적을 확인 할 수 있었다.

      

    클로킹 된 사이트의 페이지 결과를 보면 다음과 같다.

    좌측은 일반적인 Default페이지 이며, 일반 사용자가 방문 하였을 때 보이는 페이지 이다.

    우측은 Web 크롤러가 방문했을 경우, 보이는 웹 페이지이며 룰렛, 겜블 사이트 등의 Hyperlink가 다수 포함되어있다.

    이런 방식으로 사용자에겐 숨기면서, 크롤러 검색 결과를 통해 해당 link들의 검색 엔진 순위를 올리는 SEO Bot의 작동 결과이다.

     

     

  • CryptoPHP Backdoor 의 제작자 유추

    Backdoor 소스 중, 위에서 설명하였듯이 user-agent 와 hostnames 기반으로 Google, MSNBot, Yahoo, Twiiter 또는 Yandex등의

    클로러를 탐지하여 일반사용자가 방문하였을 때와 다르게 내포된 Link등을 보여준다.

     

    하지만, 흥미로운 점이 발견되었다. 소스에 보면 "chishijen12"라는 user-agent일 경우에도 크롤러가 방문하였을 때처럼 return값이 반환되어 Link등을 볼 수가 있도록 짜여 있었다. "chishijen12"라는 user-agent가 확인될 경우, 디버깅을 위해서 브라우저에 모든 PHP 오류를 출력한다. 해당 user-agent 조사결과 몰도바 공화국의 수도에서 사용되고 있는 IPv4에 대해서 사용되는 (2013년 12월부터) user-agent에서 이 문자열을 사용하는 것을 확인하였다.

       

  • CryptoPHP Backdoor C2(Command and control) Server

    총 45개의 고유 IP와, 191개의 고유 도메인을 확인 할 수 있었다.

    아래 의 그림은 해당 IP와 도메인을 플로팅 그래프로 표현한 그림이다..

    위 플로팅 그래프에서 볼 수 있듯이, 각 노드들의 하나의 IP는 3-6개의 도메인을 포함하고 있고,

      

    C2 Server들은 네덜란드, 독일, 미국, 폴란드 순으로 위치 하고 있었다.

      

  • Checking for CryptoPHP Backdoor IN Plug-ins and Themes

    플러그인 이나, 테마설치 시 다운받는 ZIP파일이나, Backdoor 내부 형태가 변하기 때문에 Hash값으로 매칭하여 찾기란 쉽지않다.

     

    가장 간단한 방법은 현재까지 조사한 바로 알려진 "social.png"파일을 찾고, 해당 파일이 정상적인 PNG 파일 포멧 헤더인지부터 조사하는 것이 가장 간단한 방법으로 생각된다.

     

    또한, 플러그인 이나 테마 설치 시 사용되는 function.php PHP페이지 가장 하단에 다음과 같은 코드가 있는지 조사 할 수 있다.

    위와 같은 방법은, Wordpress 포함, Joomla, Drupal 또한 동일하다.

     

    해당 Backdoor를 찾는 도구를 깃 허브에 업로드 한 상태이니 다운받아 사용할 수 있다.

     

    또한, 감염 서버에서 C2서버로의 Post 요청을 하는 트래픽에 대한 시그니처를 탐지하는 IDS 룰을 만들었으니, 참고하면 된다.

      

    • C2서버 IP 및 도메인 List, 파일 Hash List는 아래의 문서를 참고하시기 바랍니다.

    https://foxitsecurity.files.wordpress.com/2014/11/cryptophp-whitepaper-foxsrt-v4.pdf

     

02. ISSUE 실습

1. 실습

  • 해당 ISSUE를 테스트 하기 위해 APM설치 후, Worepress 4.0.1-ko 버전을 설치하였다.
  • 테스트를 위한 구성환경 정보는 다음과 같다.
    • OS & 3rd Party

      + CentOS6.2(32bit) Lunux Kernel 2.6.32-220 (VMware)

      + Apache 2.2.15

      + Mysql 14.14

      + PHP 5.3.3

    • WordPress CMS

      + wordpress-3.7-ko_KR

     

    Nulled styles 에서 다운 받은 CryptoPHP가 내포된 해적판 테마를 수동으로 설치.

     

    해당 테마.Zip 파일 Virustotal 의 검사결과. (Zip파일 안의 내포된 파일에 따라 시그니처가 변하기 때문에 큰 의미는 없다.)

    위와 같이 "autodealer171.zip" WordPress 테마 안에는, social.png 라는 php코드가 삽입된 CryptoPHP Backdoor가 있음을 확인.

     

    수동으로 업로드한 ZIP파일을 통해서, 테마가 정상적으로 설치됨을 확인.

      

    업로드 직후(테마적용), 패킷 캡처를 하여 네트워크 트래픽을 확인 결과.

    감염된 Web Server에서 C2 Server로 Server Key를 전송하고, C2서버는 다시 개인키를 전송하는 것을 확인했다.

    위 패킷 스트림을 통해 알 수 있듯이. 감염된 Web Server의 요청에는 User-Agent, Referrer가 없었다.

    Pic2takes.biz라는 도메인에, SSL통신이 아닌 80포트로 POST요청으로 Server Key와 암호화된 데이터, 암호화 Key 값을 전송하고,

    해당 도메인에서는 MD5 Hash값을 담은 200OK Response가 오는 것을 확인 할 수 있었다.

     

    해당 도메인은 VirusTotal 검사결과에서 봇 네트워크, 악성코드 C2 Server로 확인 할 수 있었다.

      

    감염된 서버의 이후 행위를 계속 분석하기 위해서 패킷 덤프를 1시간 가량 건 뒤 확인 한 결과.

    2개의 IP로(다수 도메인) 반복된 GET 요청을 보내는 것을 확인 할 수 있었다.

    하지만, 모든 도메인에 대한 결과는 Google로 Redirect되었고, 결국 C2서버에 직접적인 접근을 할 수 없음을 확인 할 수 있었다.

      

    트래픽을 타임테이블로 정리한 결과 행위는 다음과 같았다.

  1. BackDoor에 하드코딩된 모든 Domain중 하나의 Domain에 Post로 Server Key를 전달.
  2. Backdoor에 하드코딩된 모든 Domain에 Get / 요청을 진행.
  3. 요청한 Get의 응답으로, "www.google.com"로 Redirect 되는 것을 확인.
  4. Wev Server는 Redirect된 구글 "www.google.com" 으로 다시 Get 요청을 하게 되고,

    "www.google.com"의 Respone 에는 다시 302 Redirect "www.google.co.kr"응답. (gfe_rd=cr, ei값의 파라메터가 붙은 URL로 Redirect)

  5. 결국 모든 GET 요청은 구글의 gfe(google front end)로 연결된 후 구글 검색 메인화면의 Response(200OK)값을 받는다.

 

※gfe_rd 파라메터는 요청 URL에서 구글측에서 검색엔진 메인화면_리다이렉트(gfe_rd=cr),

Cr은 Country약자로 해당 국가의 구글 검색 메인 화면으로 Redirect 하도록 해준다.

 

따라서, 실습에서는 모든 악성 Domain요청이 2개의 단일 IP이었으며, 해당 도메인들은 구글로 Redirect 되므로,

직접적인 연결이 이루어 질 수 없음을 확인했다. Google이 싱크홀 작용을 하고 있는 것이다.

 

결론적으로, 실습에 사용된 테마의 Backdoor는 영향력이 없었지만,

만약 새로 코딩된 Domain이나 IP라면 반듯이 영향력이 있을 것이며, 클로킹(BlackhatSEO)의 목적을 이루기에는 충분하리라 생각한다.

 

악성 Domain 으로 Get 요청 -> www.google.com으로 Redirect -> www.google.co.kr로 다시 Redirect -> google.co.kr에서의 200OK 응답.

 

위 과정을 반복 진행하고 있으므로, 많은 트래픽이 발생하게 되지만, 백도어 감염으로 인한 실습에서 원격 조종은 불가 하였다.

  

 

 

확인결과, 수많은 도메인은 단일 2개의 C2 Server IP로 확인되었다.

 

Google을 제외한 모든 http Request의 도메인은 악성 C2 Server로 확인되었고, 해당 요청이 다시 Google.co.kr로 Redirect 되었다.

  

위와 같이 악성 Domain을 Web Browser로 요청 할 경우,

www.google.com으로 Redirect되고 -> 다시 google.co.kr으로 Redirect되며, 최종적으로 사용자는 Google.co.kr의 메인 화면에 접속된다.

  

03. ISSUE 대응방안

1. ISSUE 탐지 정책

해당 ISSUE는 취약한 3rd Party, 업데이트 미흡, 악성테마 다운로드 등의 조건이 성립되어야만 가능하다.

Backdoor를 다운로드 하였더라도, png파일의 코드를 실행하지 않도록 3rd Party업데이트, Wordpress 업데이트, 서버 백신등으로 대응 가능하며,

이번 ISSUE의 보고서를 작성한 Fox-IT Security에서 제공하는 python파일을 다운로드 하여, 해당 Backdoor 유무를 검사 할 수 있겠다.

당연한 말이지만, 가장 기본적인 보안 설정 적용 및 불법적인 CMS 테마 다운로드를 하지 말아야 한다.

 

Fox-IT에서 제시하는 정책을 Snort IDS에 적용 할 수 있겠지만, 자신만의 정책을 만들고 실습 해 본다.

아래와 같이, 감염된 Web Server는 CnC Server와 암호화 통신을 하기위한 Server Key 및 감염 Server의 Data를 전송한다.

그 외에 발생하는 Get 요청으로 지속적으로 발생하는 악성 Domain List 등은, DQ 정책으로 설정하면 될 것 같다.

 

alert tcp any any -> any any (msg:"UDS_XXX_CryptoPHP_CnC_Key_OutBound"; flow:established,to_server; pcre:"/Content\x2DDisposition\x3A\x20form\x2Ddata\x3B\x20name\x3D\x22serverKey\x22/i"; pcre:"/Content\x2DDisposition\x3A\x20form\x2Ddata\x3B\x20name\x3D\x22data\x22/iR"; pcre:"/Content\x2DDisposition\x3A\x20form\x2Ddata\x3B\x20name\x3D\x22key\x22/iR"; sid:5;)

# 정책설명: CryptoPHP의 감염직후 내부 -> 외부 POST 요청 (Server Key, Data, Key) -> C2 Server 로 전송을 탐지.

  

IDS 탐지 테스트 결과,

<IDS Log>

 

<Raw-Data>

  

04. 결론

1. 보고서를 작성하며 느낀 점

  • 이번 CryptoPHP Backdoor는 국내에선 다행히도, 사용되는 서비스나 사람들의 분포도가 적어서 피해가 크진 않겠지만,

    피해가 없다는 것 또한 아니다. 또한 사람들의 무료를 원하는 심리를 악용한 악성코드 배포는 새로운 배포기술은 아니다.

    하지만, 플러그인 이나 테마의 해적판 버전의 완성도가 높고, 22개나 되는 도메인에서 배포하여 제법 피해가 큰 Issue였다.

     

    이번 ISSUE의 CryptoPHP를 조사하면서, 정말 놀라운 것은 여느 WebShell 보다 정교하고, 잘 짜인 코드였다.

    해당 Backdoor의 목적이 BlackhatSEO처럼 클로킹 기법은 사용함에 있어, 몰랐던 기법도 알게 되었다.

     

    검색엔진순위를 불법적으로 조작하는 것이 궁극적 목적이라 볼 수 있는데, 이 부분이 아주 흥미로웠다.

    몇 만개 이상의 정상적은 Web Server에 사용자는 볼 수 없고, 크롤러 들만 해당 페이지를 확인 한다면,

    검색엔진 순위 신호가 상승하게 될 것이고, 그에 따른 불법적 혜택을 받을 것이다.

     

    이런 검색엔지순위 조정을 위해서 뭘 할 수 있을까?

    생각해보면 단순히 한 두개의 Web Server를 해킹하여 개인정보를 탈취하는 것 이상의 이득이 발생할 수 있다고 판단된다.

    사업 목적의 Site 홍보나, 정치적인 홍보 수단으로 까지 활용 할 수 있다고 생각된다.

     

    이러한 Backdoor는 반듯이 제거되어야 하며, 포털사이트 에서도 이러한 클로킹 기법에 대한 대응방안 등을 제시해야 한다고 생각한다.

     

      

05. 참고문헌

•    블로그(hostpair): http://blog.hostpair.com/how-to-clear-cryptophp-php-malware/

•    CIO Korea: http://www.ciokorea.com/news/23162

•    보안뉴스: http://www.boannews.com/media/view.asp?idx=44242&kind=4

•    Infosecurity magazine: http://www.infosecurity-magazine.com/news/cryptophp-offers-free-cms-plugins/

•    Foxitsecurity Report: https://foxitsecurity.files.wordpress.com/2014/11/cryptophp-whitepaper-foxsrt-v4.pdf

•    BlackHat SEO: http://www.blackhatworld.com/blackhat-seo/f1-black-hat-seo/

•    Google Hacked: https://support.google.com/webmasters/answer/2600721?hl=en#preparation

+ Recent posts