🌻

004. 정보보안 (1)

1. 시스템 보안

  • 패스워드
  • 접근 제어
  • 권한 ex) 권한 탈취, 상습 해킹 기법
  • 로그
  • 취약점
  • 메모리 조작 ex) 메모리 삽입이나 삽입된 데이터 오염
  • DB의 데이터 암호화
  • 응용프로그램 관리 ex) 프로세스 확인 예를 들어 'bandicam'을 'bandicem' 으로 해놓는 등의 프로세스를 위장
 
시스템 보안은 컴퓨터와 시스템을 장악하기 위한 가장 유효한 공격 방법입니다. 예를 들어 2010년에 이란의 핵 시설을 공격한 스턱스넷, 2014년 한국수력원자력 발전소 해킹 기법이 이와 같습니다. 시스템 해킹을 해놓고 6개월 이상의 잠복기간을 거쳐 시스템을 하나씩 장악하는 기법입니다.
특히 한국수력원자력 발전소 해킹은 스피어피싱이 활용되었습니다. 예를 들어, 여러분들의 SNS 계정을 살펴서 여러분들의 지인이나 가족관계 등 개인정보 모두를 살펴본 후 자주 접속하는 사이트 또는 게임에 덫을 만들어 틈이 조금이라도 생겼으면 그것을 파고들어 서서히 시스템을 장악할 수 있습니다.
💡
스피어피싱 (Spear-Phishing) 불특정 다수가 아니라 특정인을 타겟으로 하는 피싱
 
이렇게 시스템을 정복했다면 시스템을 마비시킬 수도 있고 시스템 정보를 탈취할 수도 있고 계좌의 권한을 획득할 수도 있고 정보를 위변조할 수도 있습니다.
언어는 주로 C나 Python을 사용합니다. 특히 Python은 해커의 언어라고 할 정도로 개발하기에 간편해서 익스플로잇 코드를 만들기도 쉽습니다.
Google에서 '취약점 가이드'라고 검색을 해 보시면 시스템 보안에 관한 취약점 가이드 PDF 파일이 나옵니다. 반대로 여러분들이 시스템을 해킹해야 하는 입장이라면 파일에 나와있는 취약점들이 실제로 그 시스템에 반영이 되어있는지 확인하면 됩니다.
여러분들이 더 공부를 하고 싶으시다면 remote exploit, vulnerable exploit이라 검색하면 침투할 수 있는 코드를 다운 받을 수 있습니다. 이렇게 exploit 코드를 공부할 수도 있지만 Github에서 exploit이라고 검색하시면 이미 공부하신 많은 분들이 exploit 코드를 올려놨으니 확인하면 좋을 것 같습니다.
 

2. 네트워크 보안

  • DDoS
  • DoS(Teardrop Attack, LAND Attack, SYN Flooding Attack, smurf Attack, ...)
  • 스니핑
  • 스푸핑
  • 세션 하이재킹
  • Scanning Attack
 
간단한 DoS 공격들의 코드 등은 인터넷에서도 쉽게 찾아볼 수 있습니다. 물론 이 네트워킹 해킹을 이해하기 위해서는 웹의 동작방식에 대해 잘 알고 있어야 합니다. 예를 들어서 SYN Flooding 공격 같은 경우에는 클라이언트와 서버 간의 통신을 우선 이해해야 합니다. 웹과 통신하려면 3-way handshake 과정이 필요합니다.
우선, 3-way handshake에 대해서 간략하게 설명 드리겠습니다. 여러분이 만약 네이버에서 무언가를 검색하려고 한다면 여러분들은 클라이언트가 되는 거고요, 네이버가 서버가 됩니다.
  1. 클라이언트가 서버에게 접속 요청을 보냅니다.
  1. 서버는 클라이언트의 요청을 수락한다는 의미로 메시지를 보냅니다.
  1. 클라이언트는 서버의 메시지를 확인해서 연결을 성립시킵니다.
 
SYN Flooding은 1번과 같이 요청 메시지를 끊임없이 보내는 공격을 말합니다. 그렇게 되면 수신자의 입장에서는 이 요청 메시지만 받다가 다른 클라이언트의 요청 메시지를 적정 시간 내에 응답하지 못합니다. 그래서 이러한 공격들을 통틀어 Denial of Service 즉, DoS 공격이라고 합니다. DDoS는 Distributed Denial of Service 공격이며, 여러 대의 PC로 한꺼번에 DoS 공격을 하는 것을 말합니다.
DoS 공격의 경우, 요청 메시지의 개수를 제한하면 쉽게 막을 수 있습니다. 그래서 해커들은 수만대의 PC를 사용해서 DoS 공격, 즉 DDoS 공격을 합니다. 이 많은 PC를 확보하기 위해 일반 사용자의 PC를 좀비 PC로 만듭니다. 좀비 PC는 정품 소프트웨어를 사용하지 않고 크랙 파일을 이용하는 등의 루트로 감염될 수 있습니다. 이밖에도 네트워크 공격들이 어떻게 일어나는지 검색하고 공부하시면 많은 것을 얻어갈 수 있을 겁니다.
국내에서는 7.7 DDoS 공격 사건이 있었는데요, 국가 전방위적으로 공격이 일어났던 사건입니다. 이러한 대규모 공격은 진짜 공격을 숨기기 위한 용도로도 사용됩니다. 마찬가지로 좀 더 공부를 하고 싶다면 Github에서 Python DoS code를 검색해서 공부하시면 됩니다.
또한 Wireshark 같은 툴로 패킷 분석을 할 수도 있습니다. 튜토리얼은 이전 챕터에서 말씀 드린 보안 프로젝트(https://bit.ly/36to7Ak) 채널에서 확인할 수 있으니 직접 패킷 분석을 경험해 보는 것을 권장해 드립니다. 관제나 CERT의 경우에도 패킷 분석을 하는 경우가 많기 때문에 많은 도움이 되실 겁니다.
 

3. 애플리케이션 보안

애플리케이션 보안(Application Security)은 응용 소프트웨어의 보안 정책에서의 결함이나 시스템 개발에서의 눈에 띄지 않는 위약점들 같은, 코드의 생명주기 전체 과정을 포괄합니다. (출처 : wiki)
이는 웹, 앱 뿐만 아니라 응용 프로그램까지 거의 모든 소프트웨어에 속하게 되고요, 구글에서 애플리케이션 보안 가이드 또는 시큐어 코딩 가이드라고 검색하면 애플리케이션 보안을 어떻게 신경 써서 개발을 해야 하는지 배울 수 있습니다. 이전에 말씀 드렸듯이 이런 가이드가 있다면 반대로 해커의 입장에서는 이런 보안 가이드가 잘 지켜져 있는지 확인해 보시면 됩니다.
 

4. 리버스 엔지니어링

리버스 엔지니어링은 역공학이라고도 하고요, 코드를 분해하고 분석해서 재조합을 하거나 완전히 새로운 제품으로 만들어내는 일련의 과정을 의미합니다. 새로운 제품을 만드는 게 정보보안에서 어떤 의미가 있고 어떤 목적이 있을까요?
리버스 엔지니어링을 통해 취약점 분석과 악성코드를 분석할 수 있습니다. 그러면 꼭 분석을 해야만 바이러스인 것을 알까요? 그렇지는 않습니다. 바이러스토탈(https://www.virustotal.com/gui/)에 들어가면 파일을 업로드할 수 있는 곳이 있습니다. 업로드를 하면 바이러스 유무를 32개의 안티 바이러스 회사에 물어보게 되고, 만약 하나라도 바이러스가 있다면 바이러스라고 알려줍니다.
리버스 엔지니어링은 프로그래밍 언어도 어느정도 알고 계셔야 하고 레지스터, 메모리, CPU, 운영체제에 대한 지식도 필요합니다.
ollydbg, IDA 등의 도구를 사용하실 수 있으며 코드를 어셈블리어 코드로 바꿔줍니다. 이를 해석하면서 한 단계씩 밟아올라가면서 어떤 일을 수행하는지 확인하실 수 있습니다.
notion imagenotion image
 
피보나치 수열을 예시로 들겠습니다.
notion imagenotion image
고급 언어인 python에서는 쉽게 이해가 됐던 코드가 어셈블리어로 넘어가면 한눈에 알아보기가 어렵습니다.
 

5. 포렌식

포렌식은 파일이나 시스템을 조사/수사 또는 파일 복구를 하기도 하고 범죄 현장을 재현하기도 합니다. 예를 들어서 황우석 박사의 줄기세포 사건에서 김선종 연구원의 노트북에서 포렌식을 통해 증거를 획득해 유죄를 선고 받은 적도 있습니다. 이러한 포렌식 수사를 피하기 위해서 하드디스크를 삭제하는 경우도 있습니다.
포렌식은 포렌식 기술 뿐만 아니라 조사, 법률에 관해서 많은 공부가 필요합니다. 특히 증거에 대해서도 세부적으로 공부를 하게 됩니다. 직접 증거, 간접 증거, 인적 증거, 물적 증거 등 파일 뿐만 아니라 사람이나 네트워크, 메모리 상에 존재하는 것들까지 모두 증거가 됩니다. 또한 아래의 것들을 지켜야 합니다.
  1. 정당성 원칙 : 적법한 절차에 의해서 증거가 확보가 됐는지
  1. 재현의 원칙 : 검증을 할 때 동일한 결과가 나왔는지
  1. 절차 연속성의 원칙 : 이 증거를 획득하고 이송하고 분석하고 보관하는 일련의 과정에서 적절한 절차에 의해서 입회되는 모든 사람들이 입회된 상태에서 수사를 하였는지 또는 증거물의 변조나 손실을 대비하면서 수사를 진행하였는지
  1. 무결성의 원칙 : 증거를 획득하여서 수사를 하였어도 중간에 위조가 되지 않았는지
  1. 신속성의 원칙 : 메모리 같은 휘발성 저장 장치에서 지체없이 증거 수집이 이루어졌는지
 
툴로는 Encase를 사용하는데 간단한 파일 복구라면 레쿠바를 이용하세요.
 

6. 버그헌팅

취약점은 어디에나 존재합니다. 풀리지 않은 자물쇠는 없다는 말이 있듯이 완벽한 코드도 존재하지 않습니다.
  • 소스코드 감사 : 소스코드를 보면서 취약점을 찾아내는 것
  • 바이너리 감사 : 어셈블리어를 보면서 취약점을 찾아내는 것
  • 퍼징 : 자동 입력 값을 넣어서 취약점을 찾아내는 것
  • 권한 상승
KISA에서는 SW 신규취약점 신고포상제를 운영하고 있습니다. 여러분들이 만약 취약점을 발견했다면 신고가 가능합니다.
 

7. 암호학

암호학은 실제 전하고자 하는 메시지를 숨기는 것을 말합니다. 이런 것들이 왜 필요할까요? 만약 암호학이 없다면 여러분들이 통신하는 그 모든 데이터가 공개되거나 공인인증서 같은 인증 프로그램도 없을 겁니다. 대표적인 암호법으로는 아래와 같은 것들이 있습니다.
  • 전치법
  • 대체법
  • DES
  • AES
  • RSA
  • MD5
  • SHA
 
여러분들이 정보보호를 공부하게 된다면 이 암호학에 대해서도 학습할 겁니다. 예를 들어, I LOVE YOU를 암호화해 봅시다. 암호화 방식은 알파벳 상에서 두 글자씩 미룬 문자들을 조합하는 방식을 사용해 봅시다. 그러면 암호문은 K NAXG AQW가 될 겁니다. 이 암호문을 누군가에게 보낸다면 암호화 방식도 같이 전송해서 수신자가 복호화할 수 있습니다.
Google에 MD5를 검색해 보세요. 파일이나 문자를 MD5로 바꿔주는 웹 서비스들이 존재합니다. MD5는 원문이 길어지거나 심지어 파일이어도 동일한 길이의 문자열로 암호화 해줍니다. 따라서, 암호를 저장할 때 사용합니다. 하지만 단방향 암호화 방식이라 레인보우 어택을 사용해서 원문을 알아볼 수 있는 취약점도 존재합니다.
💡
레인보우 테이블 공격 레인보우 테이블은 해시 함수를 사용하여 변환 가능한 모든 해시 값을 저장시켜 놓은 표로 이 표를 이용해서 원문을 알아내는 데 사용합니다.