본문 바로가기

4-9. 2020-2 심화 스터디/웹 퍼저

[2020.09.26] Network Protocol Fuzzing

Web Fuzzer 팀은 이번주차에 취약점 분석을 위한 퍼징 및 Microsoft 문서를 학습하였다.

  • 취약점 분석을 위한 퍼징 : 3. Network Protocol Fuzzing
  • Automated Penetration Testing with White-Box Fuzzing : Fuzzing Process ~ Product-Testability Design for Fuzzing

<취약점 분석을 위한 퍼징 : 3. Network Protocol Fuzzing>

[요약]

1. Network Protocol Fuzzing?

서버의 데몬을 대상으로 하여 조작된 패킷을 전송하는 것

   • 서버의 데몬 : 소켓을 통하여 클라이언트와 통신하는 어플리케이션

 

Client에서 Server로 보낸 메시지: 데몬 - 받아서 파싱 후 연산처리

   • 필요에 따라 다시 Client에게 메시지를 보냄

☞ 사용자의 입력이라는 과정을 거치므로 취약점 발생 가능.

 

네트워크 프로토콜 퍼저는 클라이언트의 입장에서 메시지를 조작하여 소켓을 통해 서버로 전송함.

 

 

2. 네이트온 프로토콜

(1) Update Server :  메신저의 버전 확인과 업데이트를 처

     • 네이트온 메신저가 실행될 때 처음 접속되는 서버

 

(2) Dispatch Server : 사용자들을 분산시키는 역할

     • 네이트온의 서버에 과부하가 걸리는 것을 방지

 

(3) Notification Server : 인증 처리, 쪽지 전송

     • 사용자 인증, 그룹/친구 리스트 요청, 접속중인 친구 알림, 연결상태 확인

     • 인증을 위해 주고받는 메시지는 TCP 소켓으로 통신이 이루어진다.

 

(4) Session Server : 사용자와 사용자 사이에 세션을 연결해주는 역할

     • 대화, 파일 전송

     • SS에 접속하려면 NS에서 RESS 메시지를 전송해야 한다.

 

2-3. Notification Server

1) 인증

ssh 티켓을 받는 받는

   • Ex) https://nsl.nate.com/client/login.do?id=[id]&pwd=[passwd] 접속하면 응답메시지로 받을 수 있다.

 

인증에 필요한 메세지들

 

인증이 완료 시

  • 서버는 클라이언트에게 10초 주기로 PING 메시지를 보낸다.

  • 서버가 PING 메시지를 8번 보내는 동안 클라이언트에서 응답이 없으면, 서버가 강제로 소켓을 닫아서 연결이 끊어지게 되어 있다.

 

2) 쪽지 전송

쪽지를 전송하기 위해서는 CMSG 메시지 NS 소켓으로 보낸다.

 

쪽지의 전송이 성공 시 응답 메시지를 받을 수 있다.

 

2-4. Session Server 인증

SS에 접속하려면 NS에서 RESS 메시지를 전송해야 한다.

 

RESS 메시지를 NS로 보내면 서버로부터 RESS 메시지를 응답받는다.

 

 

3. 퍼징 방법

메시지 조작 = 패킷 조작

(1) 애플리케이션 계층(TCP, UDP 윗단)의 프로토콜을 퍼징

    • 메시지의 순서를 무작위로 섞기

    • null 문자를 삽입

    • % 인코딩 이용

☞ 대부분의 서버 데몬들은 어플리케이션 층에서 동작하므로 이러한 방법들만으로도 퍼징의 효과를 볼 수 있다.

 

(2) TCP, UDP 소켓을 이용하여 퍼징

    • 퍼징의 대상으로 삼을 서버의 프로토콜에 대한 이해 정도가 가장 중요

    ) 특정 메시지만을 파싱하여 연산 처리하는 경우, 해당 메시지가 없으면 데몬이 패킷을 무시할 수 있음.

 

(3) 로우 소켓을 이용하여 TCP, UDP 헤더를 직접 조작하여 퍼징

    • 네트워크 장치를 직접 다루기 때문에 OS의 권한 문제도 해결해야 하지만,

      어플리케이션 계층의 프로토콜이 아닌 패킷 그 자체를 직접 퍼징하기 때문에 더 좋은 결과를 낼 수 있다.

    • 프로토콜 퍼징이라기 보다는 네트워크 자체에 대한 퍼징으로 간주해야 한다.

 

(4) IP 계층까지 조작하여 퍼징

 

 

4. fuzzNateon.py

네이트온 프로토콜을 바탕으로 whitespace나 “\r\n” 등을 기준으로 메시지 내용을 쪼개어서 각 데이터에 에러가 발생할만한 쓰레기 데이터를 삽입하는 방법을 이용하는 예

통신에 이용되는 모든 메시지에 대해서 fuzzMsg() 메소드를 적용할 수 있다.

Fuzzer를 돌리면서 서버로부터 에러코드가 반환되거나 소켓에러가 발생하면 퍼징이 성공하였다고 판단함.

    • 그러나 그것이 바로 취약점이라고 단정할 수는 없다.

    • 메시지가 부정확하다 고 서버가 판단하면 자동으로 소켓을 닫아버리기 때문에 그런 경우에도 소켓에러가 발생한다.

 

[추가 자료 서칭]

1. 데몬(daemon) 이란?

네트워크 프로토콜 퍼징은 서버의 데몬 대상으로 하여 조작된 패킷을 전송하는 것을 말한다.

 

리눅스 시스템이 처음 가동될 때 실행되는 백그라운드 프로세스의 일종.

사용자의 요청을 기다리고 있다가 요청이 발생하면 이에 적절히 대응하는 리스너 역할

사용자에게 무언가를 전달받지 않고 스스로 동작하는 프로세스

MS 윈도우의 서비스(service)와 유사, 실제로 서비스라고 르기도.

이름의 유래: 열역학에 영향을 끼치며 일을 하는 도깨비처럼 보이지 않는 곳에서 작업을 하는 백그라운드 프로세스를 귀엽게 표현

 

서버데몬 유형: 웹서버데몬(httpd), DB서버데몬(mysqld)

    ex. service httpd start/stop/restart로 데몬 실행 및 종료

e.g) 사용자가 ssh접속(로그인)을 위해 주소입력 (https://~~~)

Cmd가 사용자가 입력한 ssh명령을 해석이 실행하고, 해당 주소로 ssh접속 시도

서버에서 실행중인 ssh데몬과 세션을 은 다음 그 ssh 데몬이 사용자에게 보여주기를 원하는 내용을 전달받아 화면에 출력한다.

 

 

2. 소켓이란?

서버의 데몬은 소켓을 통하여 클라이언트와 통신하는 어플리케이션이다.

TCP/IP로 통신을 행하는 컴퓨터가 가지는 네트워크 내에서의 주소에 해당하는 IP어드레스와 IP어드레스의 서브(보조)어드레스인 포트 번호를 조합한 네트워크 어드레스이다.

 네트워크상에서 서버와 클라이언트 두 개의 프로그램이 특정 포트를 통해 양방향 통신이 가능하도록 만들어주는 소프트웨어 장치라 말할 수 있다.

 소켓을 정의하는 것: IP 주소, 포트 넘버, 프로토콜 (하지만 이것이 유일하게 소켓을 식별하지는 않는다.)

 소켓 식별은 소켓의 id 값으로 한다.

 같은 IP 주소, 포트 넘버, 프로토콜을 가지는 소켓이 수십 혹은 수만 개의 소켓을 가질 수 있다.

    • ex. 게임 서버 동시 접속자수십수백만.

 

 

3. 포멧 스트링 공격(Format String Attack)

: 포맷 스트링의 취약점을 활용한 공격

 

포멧 스트링 : 사용자로부터 입력값을 받아들이거나 결과를 출력하기 위해 사용하는 형식(ex. %d, %f, %c )

    • %n(형식 지시자) : 출력될 문자들의 개수를 셀 수 있는 기능

    • %n 지시자 전에 지정된 출력되어야할 모든 공간의 개수를 해당 변수에 저장하여 메모리나 값을 조작

, 출력하려는 문자열 내 %d와 같은 지시자가 들어있게 되면 형식 지시자 개수만큼 인자들이 스택으로부터 추출

→ 사용자의 입력에 따라 지시자의 수가 달라지기 때문에 악의적인 공격자에 의해 스택의 내용 확인 가능

 

\r\n 의 의미

    • \r(Escape Character, 탈출 문자) à 커서를 그 줄의 맨 앞으로 이동

    • \n(Line Feed) à 다음 줄로 넘어가기 위한 개행 문자

2번 보내면 헤더라인이 끝났다는 의미

 1번 보내면 보낼 것이 남아있다는 의미

 

 

4. 힙을 사용한 메모리 손상

힙(heap)이란?

사용자가 직접 관리할 수 있는 영역

사용자에 의해 메모리 공간이 동적으로 할당되고 해제됨

메모리의 낮은 주소에서 높은 주소 방향으로 할당

malloc() 또는 new 연산자를 통해 할당하고 free() 또는 delete 연산자를 통해 해제가 가능

장점

    • 프로그램에 필요한 개체의 개수나 크기를 미리 알 수 없는 경우에 사용

     개체가 너무 커서 스택 할당자에 맞지 않는 경우 사용

단점

    • 할당/해제 작업으로 인한 속도 저하

    • 응용 프로그램에서 블록을 적절하지 않게 사용할 경우 힙이 손상(이중 해제, 해제 후 블록 사용, 블록 경계 덮어쓰기 등)

 

 

 

<Automated Penetration Testing with White-Box Fuzzing : Fuzzing Process ~ Product-Testability Design for Fuzzing>

[추가 자료서칭]

1. MTBF이란?

 평균 장애 간격 Mean Time Between Failure

 운영 시간 수 / 실패 수

 예를 들어 어떠한 프로그램이 1년에 1,000시간 운영, 그 한 해 동안 8broke, MTBF125시간

 

 

2. ISA Server 2006 case study

Microsoft ISA (Internet Security and Acceleration) Server 2006을 개발하는 동안 퍼징에 대한 사례 연구 제공

 

☞ Black box일 때 30%의 결함 발견, 나머지는 white box fuzzing으로 결함이 발견되었다.

 

https://docs.microsoft.com/en-us/previous-versions/software-testing/cc162782(v=msdn.10)?redirectedfrom=MSDN#case-study

 

Automated Penetration Testing with White-Box Fuzzing

Automated Penetration Testing with White-Box Fuzzing 10/14/2009 20 minutes to read In this article --> John Neystadt Microsoft Corporation February 2008 Summary: This article covers how to employ a white-box testing approach to fuzzing, leveraging availabl

docs.microsoft.com

 

 

[출처]

부경대학교 CERT-IS - 취약점 분석을 위한 퍼징

hisjournal.net/doc/[KUCIS_Project]_Fuzzing_for_Finding_Vulnerabilities_by_CERT-IS.pdf

github.com/Funniest/Easy_fuzzer

 

Funniest/Easy_fuzzer

fuzzer study, use ptrace. Contribute to Funniest/Easy_fuzzer development by creating an account on GitHub.

github.com

Microsoft Document - Automated Penetration Testing with White-Box Fuzzing

https://docs.microsoft.com/en-us/previous-versions/software-testing/cc162782(v=msdn.10)?redirectedfrom=MSDN

 

Automated Penetration Testing with White-Box Fuzzing

Automated Penetration Testing with White-Box Fuzzing 10/14/2009 20 minutes to read In this article --> John Neystadt Microsoft Corporation February 2008 Summary: This article covers how to employ a white-box testing approach to fuzzing, leveraging availabl

docs.microsoft.com