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로 읽어질때의 값 ]
실행파일 실행될 때

SNORT IPS_UDP Flooding과 Scanning 공격

2018-11-23

Snort IPS에 새로운 Rule을 추가하여 반응을 확인하기


UDP / UDP Flooding 

  • snort/rules

[ /etc/snort/rules ]
UDP Flooding 공격이 왔을 때 반응을 확인하기 위하여 snort에 rule을 추가



  • snort set


[ /etc/snort ]
rule의 설정 추가


  • snort 실행


[ snort 실행 ]



  • UDP 공격
 [ 공격용 PC : Kali ]
nmap 이나 nessus를 이용해 열린포트 확인하고
udp 공격



[ 반응 ]




XMAS  SCAN 공격

  • XMAS SCAN 관련 rule 추가

[ LOCAL RULES ]
sid : 10000000 대


[ /etc/snort.conf ]
공격이 들어왔을 때의 반응 추가


  • Snort IPS 실행





  • CentOS로 XMAS 스캔 공격


[ nmap ]



[ Wireshark ]
TCP 들어오는 것 확인 


[ 공격들어온 것을 저장 ]




NULL SCAN 공격

  • Rule




  • 공격시 반응을 저장할 rule






Null 스캔에 대하여 패킷탐지 방어하기



[ wireshark ]


  • 공격




  • 참고


[ Sophos 설정 ]


  •  반응



SNORT로 IDS 설치 및 ICMP 공격

2018-11-14

SNORT IDS 설치를 위한 설정


  필수 패키지 설치

  • apt-get -y install flex bison build-essential checkinstall libpcap-dev libpcre3-dev libmysqlclient-dev libnetfilter-queue-dev iptables-dev libdnet-dev
    • flex : 텍스트 패턴 생성
    • bison : GNU Parser ( Parser: Parse + er = 구문분석 + 하는 놈 =구문분석 하는 툴)
    • build-essential : 소스코드를 컴파일하는데 필요한 최소한의 도구모음
    • checkinstall : 소스코드를 컴파일이 된 것을 패키지로 만들고 실제로 설치도 해준다.
    • libpcap-dev : libpcap 개발자 버전
      • libpcap : 리눅스/유닉스용 Packet Capture Library ( 윈도우용은 WinPcap) 
      • dev -> devlopment -> 개발자들을 위한 라이브러리
    • libpcre3-dev : 개발자용 pcre 라이브러리
      • libpcre3 : pcre 라이브러리
      • pcre : Perl Compatible Regular Expression = 펄 호환 정규화 표현식
      • Perl : 스크립트 언어의 한 종류, 문법이 쉽고 활용 범위가 넓다.
    • libmysqlclient-dev : 개발자용 libmysqlclient -> Snort가 탐지한 내역을 DB에 저장하려고
      • libmysqlclient : mysql client 용 라이브러리
    • libnetfilter-queue-dev  : 
      • libnetfilter-queue(NFQUEUE) : iptables로부터 패킷을 전달받는 역할 (NFQUEUE)
    • iptables-dev : 개발자용 Ipatables(방화벽)
    • libdnet-dev : libdnet 개발자용
      • libdnet : 네트워크 관련 정보 확인, 수정, 방화벽 제어, 패킷생성/전송
   

  작업 디렉토리 생성

  • mkdir -p /root/snort-install
  • cd /root/snort-install

  libdnet 컴파일 설치

  • libdnet 최신버전이 아닌 1.12버전을 필요로하기 때문에 어쩔수 없이 다운받아 설치
  • wget http://ftp.psu.ac.th/pub/snort/libdnet-1.12.tgz
  • tar zxvf libdnet-1.12.tgz
  • cd libdnet-1.12
  • ./configure "CFLAGS=-fPIC"   //빌드(컴파일) 할  옵션을 지정하는 과정
  • make    //실제 컴파일(빌드) 과정
  • checkinstall -y    //CheckInstall will build a .deb package and install it. 
  • dpkg -l |grep libdnet   //패키지 설치 확인
  • ln -s /usr/local/lib/libdnet.1.0.1 /usr/lib/libdnet.1

  DAQ 컴파일 및 설치

  • 설명: Data AcQuisition : 데이터 수집
    • 참고 https://snortrules.wordpress.com/2010/10/22/snort-2-9-0-%EC%9D%98-daq-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EA%B8%B0%EB%8A%A5/
  • 스노트가 공격탐지할 때 필요한 정보를 제공하는 역할
    • cd /root/snort-install
    • wget https://www.snort.org/downloads/snort/daq-2.0.6.tar.gz
    • tar zxvf daq-2.0.6.tar.gz
    • cd daq-2.0.6
    • ./configure
    • make
    • checkinstall -y       //CheckInstall will build a .deb package and install it.
    • dpkg -l |grep daq

  Snort 설치

  • cd /root/snort-install
  • wget https://www.snort.org/downloads/archive/snort/snort-2.9.11.1.tar.gz 
  • tar zxvf snort-2.9.11.1.tar.gz
  • cd snort-2.9.11.1
  • ./configure --enable-sourcefire
  • make 
  • checkinstall -y       //CheckInstall will build a .deb package and install it.
  • ln -s /usr/local/bin/snort  /usr/sbin/snort
  • ldconfig -v   //설치 확인(버전 체크)
  • snort -V   //설치 확인(버전 체크)

[ 실습 ]

◎ IDS 설치

              1. ICMP 탐지
              2. Back Door 탐지


  Snort 탐지 Rule 설치

  • Snort.org 로그인
  • Step3 에서 Registered Rules 클릭
    • 로그인 하고 다운받아서(웹) 
  • mkdir /etc/snort
  • tar -xvfz snortrules-snapshot-29111.tar.gz -C /etc/snort

  Snort 설정

  • mv /etc/snort/etc/* /etc/snort
  • vi /etc/snort/snort.conf
  • ipvar HOME_NET 192.168.0.0/24  //보호할 네트워크의 IP영역
  • ipvar EXTERNAL_NET !$HOME_NET
  • var RULE_PATH /etc/snort/rules
  • var SO_RULE_PATH /etc/snort/so_rules
  • var PREPROC_RULE_PATH /etc/snort/preproc_rules
  • var WHITE_LIST_PATH /etc/snort/rules
  • var BLACK_LIST_PATH /etc/snort/rules

**주의 

- HTTP 전처리기 설정에서 처리할 수 없는 오류 발생
324번줄 \(BackSlash) 제거
325줄 주석처리 (맨앞에 # 추가)  --> webroot no 이거 제거하려고
326 주석처리 (맨앞에 # 추가)  --> decompress_swf 이거 제거하려고
326 주석처리 (맨앞에 # 추가)  --> decompress_pdf 이거 제거하려고

  스노트 실행 에러 발생 시 해결

  • touch /etc/snort/rules/white_list.rules --> 파일이 없어서 snort 실행시 에러발생
  • touch /etc/snort/rules/black_list.rules --> 파일이 없어서 snort 실행시 에러발생
  • mkdir /usr/local/lib/snort_dynamicrules  --> 디렉토리가 없어서 snort 실행시 에러발생

  추가 룰 추가

  • 설치한  Registered Rules에 포함된 룰이 부실하므로 추가적으로 다운로드하여 추가한다.
  • wget https://raw.githubusercontent.com/eldondev/Snort/master/rules/icmp.rules
  • $RULE_PATH 를 확인하여 복사해준다.

  Large ICMP 공격 탐지 테스트

  • IDS 준비 작업
    • mkdir -p /var/log/snort  --> 로그를 남길 디렉토리 생성
    • snort --daq pcap --daq-mode passive -c /etc/snort/snort.conf -A full -l /var/log/snort -K ascii
  • 공격(칼리)
    • ping -s 1000 VictimIP

[ 공격 ]
nmap이나 nessus로도 가능

  • 탐지 확인
    • cd /var/log/snort
    • cat alert
    • 탐지된 내역 -->  [**] [1:499:4] ICMP Large ICMP Packet [**]


  백도어 탐지하기

  • Rule 추가
    • cd /etc/snort/rules
    • vi backdoor_test1.rules
      • alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"Backdoor beast2.07 Connection"; flow:to_server,established; content:"666"; offset:0; depth:12; sid:181818; rev:1)
  • snort.conf 설정
    • include $RULE_PATH/backdoor_test1.rules   //추가



Friday, January 11, 2019

리눅스 로그 파일

2019-01-11

Log File Analysis

; 컴퓨터 시스템의 모든 사용내역을 기록하고 있는 파일

1. Linux / Unix

  • 경로 : /var/log
  • 텍스트 형식의 로그파일 : cat/less, vi
  • 바이너리형식의 로그파일 : btmp및 wtmp log (특정명령어사용)
  • 시스템 관련된 데몬

    • syslogd

      • 각종 에러와 경고 메세지, 기타 일반메세지를 파일로 기록
      • 실행파일 : /etc/rc.d/init.d/syslog (rsyslog-Linux)



      • 파일 기본구성형식 (/etc/syslog.conf)
        • selector field : facility & priority (누가 보낸 것인지 & 얼마나 중요한 것인지)
        • action field : 어떻게 처리할 것인지 ( 파일 or 원격... )



훑어보기


[ dd if=/dev/sdb of=/root/sdb_image ]
하드를 sdb_image에 이미지 따올 때



[ /dev/console ]


 [ 보안로그 ]
/var/log/secure


[ 로그인-아웃 정보 ]
/var/log/wtmp
바이너리 형태 -> hexdump등 사용



LOG 정보 옮기기


 [ 실습 ]
  • 환경 : CentOS 6
  • SERVER : 로그인/아웃 내역을 전달해줄 SV
  • LOGSERVER : SERVER의 내역을 전달 받을 SV


[ LogServer의 /etc/rsyslog.conf 설정 ]
UDP 관련 목록의 주석처리를 제거



[ Server의 /etc/rsyslog.conf 설정 ]
secure목록에 정보를 받을 sv의 IP를 입력


[ service rsyslog restart ]


[ LogSV에서 확인가능 ]


[ Wireshark ]
UDP로 전달 되기 때문에 'Syslog'로 전달되는 내용 확인가능

    • klogd 

      • 부팅과 관련된 메시지 + 커널관련 메시지를 기록
      • dmesg - 부팅과 관련된 메세지

2. Windows

  • Log 대신 Event 라는 정보에 저장

List

MobSF

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