Monday, January 14, 2019

소프트웨어 오작동, Fuzzing을 이용한 취약점 공략

2019-01-14

Fuzzing

  • 비정상적인 입력데이터를 보내 소프트웨어의 취약점을 유발시키는 네거티브 소프트웨어 테스팅이다. 
  • 대표적인 예로 오버플로우나 언더플로우, 반복과 같은 비정상적인 입력이 있다.


  § Fuzzing이 일어나는 예


  • txt 파일을 읽어오는 소스코드



[ Windows 콘솔 응용프로그램 ]
속성-C/C++-보안검사-아니오



  •  결과


[ cmd 창에서 실행 ]



  • MEX_LENGTH 12를 넘어갈 경우



  • 실행은 되나 버퍼창이 함께 뜸


[ 읽어짐 ]


[ 버퍼창 ]
오작동이 됨

  • Fuzzing (오작동)되는 점을 이용하여 계산기를 실행할수 있다.






  § Fuzzing을 응용

  • txtreader.exe 리버싱하여 코드 분석

[ 메인 함수 ]


[ argv1, argv2 ]
함수를 읽어서 진행
PUSH ESI 는 백업값일 듯


[ fread ]
함수값을 읽어 실행이 이루어지는 과정
ESI 에 printf 값이 백업되어 빠르게 읽을 수 있도록 함


[ STACK ]
12byte의 내용이 저장된 것을 확인할 수 있음


[ printf 함수 ]
RETN의 주소를 조정
RETN 값을 Printf로 가게해서 무한 루프 생성가능한지 예상
(->오작동을 일으키기 위해서)


[ 리턴주소 ]
변경해서 진행하니 오류가 발생해서
바로 Calc.exe로 넘어가도록 그림그리기



  • CALC.EXE 로 바로 실행시키도록 RETN주소 설정 



[ calc.exe의 소스코드 ]
calc.exe가 실행되는 과정을 파악하기 위해


  • CALC.EXE 리버싱하여 코드 분석하기


[ calc.exe 리버싱 ]


[ STACK ]
0012FF80 003011D1 에서 실행됨을 확인



  • txtReader.exe 에 대입
  • RETN주소가 진행되기 바로 직전에 대입


[ STACK ]
0012FF80-0012FF8C 주소 변경


[ STACK ]
calc.exe가 실행될 주소에 대하여 값 대입
바로 뒤에 00(NULL)값도 대입


[ 완성 ]


실행



STACK의 내용을 하나하나 대입하기보단 STACK에 쌓이는 순서를 정리하여 바로 실행할 수 있도록 해보자


  • 정리


[ RETN 의 함수 부분 ]



  •  HxD 로 옮겨오기


[ HxD로 읽어질때의 값 ]
실행파일 실행될 때

No comments:

Post a Comment

List

MobSF

MobSF는 오픈소스 모바일 앱 자동 보안 진단 프레임워크로 자동 분석 시스템 구축할 때 사용한다. 정정 및 동적 분석이 가능하며, Android, iOS, Windows에 대해 침투 테스트, 멀웨어 분석 및 보안 평가를 할 수 있다. 참고자료 필...