복습
• 암호화를 하는 이유
- 기밀성(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
개별 메시지 대신에 통신 채널을 보호하고 데이터 암호화, 서버 인증, 메시지 무결성을 제공한다.
초록색으로 된 주소창은 인증서가 사이트 주소와 일치할 때 나타나는 서비스이면서 피싱, 파밍을 방지하기 위해 주소창에서 제공해주는 서비스이다.
.
※ 피싱 : 개인정보와 낚시의 합성어로써 위장된 사이트에 접속을 유도하는 수법이다.
※ 파밍 : 피싱 기법 중 하나로 사용자가 웹 브라우저에서 정확한 웹 페이지 주소를 입력해도 가짜 웹 페이지에 접속하게 하여 개인정보를 훔치는 것을 말한다.
참고) OpenSSL을 이용해서 자가 인증서 생성하기
https://wnw1005.tistory.com/457
• 전자 봉투
- 생성 : 원문의 해시값에 송신자의 개인키로 서명하고 원문 및 송신자의 공개키까지 첨부해서 세션 키로 암호화, 새션키는 수신자의 공개키로 암호화해서 첨부한다.
-특징 : 기밀성, 무결성, 송신자에 대한 인증 및 부인 봉쇄까지 모두 가능하다.
•최근의 이슈 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
• 취약점 공식 번호
- CVE-YYYY-NNNNnnn(NNNN(4자리부터) ~ NNNNnnn(7자리까지) 번호를 부여함)
- CVE는 일반적인 취약점 및 노출이라고 한다. CVE 시스템은 보안 취약점, 위험 노출과 같은 공개적으로 잘 알려진 정보에 대한 참조 및 방법을 제공한다.
- Home | CVE 취약점을 관리하는 공식 기관
취약점 사례 분석) 프린트 나이트메어 취약점 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)
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를 사용해 켜져 있는 시스템을 확인한다. (IP 스캔해준다.)
2) 열린 Port 확인(Port Scan)
타깃 주소를 찾은 후 열려 있는 포트가 있는지 확인을 해준다.
다음 여러 가지 방법으로 Port Scan를 해줄 수 있다.
‣ TCP Scan
3 Way Handshaking을 완성하는 스캐닝 -> 로그가 남기 때문에 공격자는 잘하지 않는 스캐닝이다.
‣ SYN Scan
3Way Hangshaking을 완성하지 않는 스캐닝(SYN만 보내고 ACK를 보내지 않는 기법)
‣ UDP Scan
실행 중인 UDP 서비스를 확인하는 스캐닝
( 시간이 너무 오래 걸린다...)
‣ OS Scan
운영체제의 종류를 파악하기 위한 스캐닝
‣ 엉터리 스캔(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
버전을 알면 취약점도 알 수 있다.
‣ All Scan
- Script scan + OS scan + Tracerouter + Version scan이다.
- T4 옵션은 Timing이라고 하면서 0~6까지 숫자를 사용한다. 클수록 속도가 빠르다.
3) 취약점 찾기
21번 포트에서 FTP 서비스가 실행을 하고 있다는 걸 확인할 수 있다.
vsftp 2.3.4 버전은 Backdoor Command가 실행되는 취약점을 가지고 있다. (구글 검색)
4) 스크립트로 확인
vsftpd2.3.4 버전에 공격이 가능한지 확인하는 nmap 명령어이다.
nmap에 vsftpd 스크립트가 있는지 확인하는 방법이다.
5) Metasploit으로 공격
취약점 모듈을 검색한다.
vsftpd_234_backdoor라는 모듈이 있다.
찾은 모듈을 사용한다.
모듈을 실행하기 위해서는 타깃 IP주소를 지정을 해야 한다.
• LHOST/LPORT - 공격자의 정보 - 공격 대상과 연결이 맺어일 때 공격자 호스트 IP 주소와 Port - 보통 리버스 쉘에서 사용 • RHOST/RPORT - 공격 대상의 IP 주소와 Port |
공격을 시작하면 세션이 연결되었다는 걸 볼 수 있다.
ip addr 명령어를 통해 Taeget IP주소에 접속이 되었고, root 권한을 받았다.
우리가 만든 계정을 확인해 볼수 있다.
공격자 PC에서 파일을 만들면 피해자 PC한테도 파일이 만들어지는지 확인을 해보자.
피해자 PC에서도 파일이 만들어진 걸 확인할 수 있다.
6) 결과
vsftp의 2.3.4 버전에 Backdoor 명령이 실행되는 취약점이 존재하기 때문에 Exploit 공격이 가능했고, Shell을 실행할 수 있는 권한(root 권한으로)도 얻을 수 있었다.
'Rookies 9기 > 시스템 네트워크보안' 카테고리의 다른 글
시스템/네트워크 보안 6일차 (0) | 2022.09.22 |
---|---|
시스템/네트워크 보안 5일차 (0) | 2022.09.21 |
시스템/네트워크 보안 3일차 (0) | 2022.09.19 |
시스템 / 네트워크 보안 2일차 (0) | 2022.09.16 |
시스템/네트워크 보안 1일차 (0) | 2022.09.15 |