기술적으로 아무리 완벽해도, 관리자 권한(인증된 사람)을 가진 사람의 취약점을 공략한다면 무너질 수 밖에 없습니다. 실제로, 사회공학기법은 많이 사용되고 있습니다.
(영화: 후엠아이, 미드: 미스터 로봇 에서 사회공학기법이 적용되는 장면을 볼 수 있습니다. 개인적인 추천 ㅎ)
1. 네트워크 기초
네트워크 또는 컴퓨터를 서로 연결하는 것에는 자원의 공유, 협력 등과 같은 많은 이점이 있습니다.
이 때, 네트워크를 구성하기 위해서는 규모와 목적에 관계없이 반드시 필요한 기본적인 사항들이 있습니다.
컴퓨터나 장비 사이의 연결 (물리적: 이더넷 케이블 혹은 무선)
사전에 서로 합의한 통신 규약의 존재 (네트워크 프로토콜 ex. TCP/IP)
클라이언트/서버 네트워크:
기업 환경에서 가장 많이 볼 수 있는 네트워크 환경
클라이언트:
최종 사용자가 사용하는 컴퓨터로 일상에서 우리가 사용하는 PC와 같은 기기를 말합니다.
파일, 서비스 그리고 정보 등을 서버로부터 요청합니다.
서버:
파일, 서비스, 정보 등을 여러 클라이언트에 제공합니다.
즉, 하나의 서버가 수백 대의 클라이언트와 파일 공유가 가능합니다.
서버는 네트워크를 더 많이 통제할 수 있으며, 보통 특정한 기능 하나만을 수행합니다.
(ex. 파일 서버, 이메일 서버, 프린트 서버 등)
P2P(Peer-to-Peer):
네트워크에 있는 모든 컴퓨터는 클라이언트와 서버 역할을 모두 수행할 수 있습니다.
기업에서는 P2P 네트워크를 거의 사용하지 않고, 파일 공유 프로그램에서 많이 사용합니다. (ex. 토렌트)
네트워크 종류
LAN (Local Area Network, 근거리 통신망):
일반적으로 작은 사무실에서 사용하는 네트워크로 하나의 사무실이나 빌딩에 있는 컴퓨터와 기기들로 구성
WAN (Wide Area Network, 광역 통신망):
LAN보다 규모가 훨씬 크며, 다른 위치에 있는 여러 개의 LAN으로 구성되어 있습니다.
그 이외에도 MAN (Metropolitan Area Network), PAN (Personal Area Networks), CAN (Campus Area Networks), GAN (Global Area Networks) 등이 있습니다.
인트라넷:
인터넷과 상반되는 것으로 한 회사의 인트라넷은 공개되어 있지 않으며 접근이 제한적입니다.
인트라넷은 파일 공유, 통신 등에 사용되며,
웹 브라우저를 사용하고 TCP/IP를 사용하는 등 인터넷과 비슷하게 작동합니다.
TCP/IP 프로토콜을 사용하는 네트워크:
해당 네트워크는 연결되어 있는 각 컴퓨터나 기기마다 IP 주소라고 불리는 고유 식별번호가 존재합니다.
IP 주소는 실제 주소처럼 메시지와 데이터가 정확히 도착지에 전달되는데 사용됩니다.
IP 주소 형식은 IPv4, IPv6두 가지가 존재하는데
IPv4는 약 40억개의 IP 주소를 할당할 수 있으며 우리에게 익숙한 형식입니다.
"."으로 분리된 4개의 숫자로 구성되어 있습니다.(ex. 198.122.55.16)
IPv6는 무한한 숫자의 주소를 할당할 수 있기 때문에 현재 IPv6로 교체되고 있습니다.
(ex. 2008:0eb3:29a2:0000:0000:8xld:0967:7256)
IP 주소는 정적 또는 동적이 될 수 있습니다. 정적 주소는 보통 고정되어 변하지 않고, 동적 주소는 주기적으로 변합니다.
(ex. 인터넷 서비스 제공업체는 정적 IP 주소를 사용합니다.)
데이터 전송
네트워크에 있는 데이터는 다양한 방법으로 전송되는데, 대부분 패킷 스위칭방식을 사용합니다.
패킷 스위칭은 데이터를 패킷이라고 부르는 작은 조각으로 만들어 IP 주소를 사용해 전달하는 방식입니다.
모든 패킷은 헤더, 페이로드, 푸터 세 부분으로 구성되어 있습니다.
IP 패킷
헤더:
송수신자의 IP 주소가 담겨 있으며, 주소 정보를 저장합니다.
얼마나 많은 패킷이 있으며, 그 중에서 해당 패킷은 몇 번째 패킷인지 알려줍니다.
페이로드:
전송되는 데이터
푸터:
수신자에게 해당 패킷이 마지막임을 알려주며, CRC (cyclical redundancy check, 순환 중복 검사)를 합니다.
CRC는 패킷에 있는 모든 1의 합으로 숫자가 일치하지 않는 경우,
데이터를 수신하는 컴퓨터에서 자동으로 데이터를 다시 요청해 재전송합니다.
즉, CRC는 패킷의 무결성을 검증하는 데 사용합니다.
게이트웨이:
네트워크로의 출입구 역할을 하는 네트워크 지점으로 한 네트워크에서 다른 네트워크로 이동하기 위해 거쳐야 하는 지점을 의미합니다.
브리지:
동일한 프로토콜을 사용하는 두 개의 네트워크를 연결하는 데 사용됩니다.
라우터:
패킷의 위치를 추출하여, 그 위치에 대한 최적의 경로를 지정하하여 이 경로를 따라 데이터 패킷을 다음 장치로 전향시키는 장치입니다.
다시 말해서, IP 주소를 사용하여 네트워크에 있는 데이터를 최종 도착지로 전송합니다.
2. 네트워크 보안 툴
네트워크를 보호하는 데 도움이 되는 소프트웨어와 하드웨어가 많이 있습니다. 이러한 툴로 공격을 방지하는 데 도움을 얻을 수 있을 뿐만 아니라 조사와 관련된 정보를 수집할 수도 있습니다.
방화벽:
방화벽은 연관된 프로그램의 세트로 네트워크의 게이트웨이 서버에 위치하여 있으며, 다른 네트워크의 사용자로부터 사설 네트워크의 자원을 보호합니다. (by Tech Target, 2000)
방화벽은 송수신되는 네트워크 트래픽을 필터링하는 역할을 하며, 네트워크 패킷을 유심히 조사하여 해당 트래픽을 허용할지 하지 않을지 결정합니다.
침입 탐지 시스템:
기업 내부와 외부의 공격을 탐지하기 위한 목적으로 만들어진 시스템입니다.
일반적으로 네트워크에서 공격 패턴이나 일상적이지 않은 시스템 또는 사용자 활동을 모니터링합니다.
3. 네트워크 공격
분산 서비스 거부 공격 (Distributed Denial of Service, DDoS):
침해된(감염된) 수많은 컴퓨터(좀비PC)를 사용하여 단 하나의 시스템을 공격하는 데 사용합니다.
공격하는 컴퓨터들은 엄청난 양의 메시지와 요청으로 공격 대상 컴퓨터를 압도하여 공격 대상 시스템이 마비됩니다.
이러한 공격을 하는 컴퓨터를 통틀어 "봇넷(botnet)"이라고 부르며, "좀비(zomebies)"라고 불리는 여러 대의 침해된 컴퓨터로 이루어져 있습니다.
IP 스푸핑(spoofing):
공격 대상 네트워크에 접근하기 위해서 유효하거나 "알려진" IP 주소를 위조하거나 "스푸핑"할 수 있습니다.
IP 자체의 보안 취약성을 악용한 것으로 자신의 IP 주소를 속여서 접속하는 공격을 말합니다.
즉, 공격자가 인증된 혹은 신뢰성 있는 사용자가 송신한 것처럼 패킷의 소스 IP를 변조하여 접속하는 공격입니다.
중간자 공격(Man-In-The-Middle-Attack):
특정 사용자와 그 사용자가 통신하는 컴퓨터 사이에 공격자 자신을 삽입하는 공격입니다.
이를 통해서 사용자가 하는 통신을 모니터하고 변경 또는 삭제할 수 있으며, 해당 사용자 행세를 할 수 있습니다.
사회공학기법:
사회공학기법은 해커들이 사용할 수 있는 공격 중에서 가장 효과적인 공격 중 하나입니다.
(기술적으로 해결하는 것보다 사람의 취약점을 공략하는 것이 더 쉽고 효과적이고 강력하기 때문!)
사회공학기법은 보호되어 있는 정보를 "속임수"나 "사기"로 획득하는 것입니다.
(ex. 공격 대상 회사의 직원에게 관심있는 분야의 이메일을 보내는 등의 행위를 취해서 공략)
풋 프린팅/핑거 프린팅:
공격자가 열려있는 포트나 서비스를 스캔하는 자동화 작업을 의미합니다.
네트워크 보안은 방화벽 외부에 있는 위협에만 초점을 둬야 하는 것이 아니라 방화벽 내부에서 발생하는 위협에도 반드시 가져야 합니다. (회사 내부자가 공격할 수도 있으니까요..!)
4. 침해대응
미국 국립표준기술연구소(National Institute of Standards and Technology, NIST)에서 컴퓨터 보안 침해 처리 지침(Computer Security Incident Handling Guide)를 발간했는데, 침해대응 라이프 사이클에 대해서 다룹니다.
침해대응 단계로는 준비, 예방, 탐지 및 분석, 봉쇄, 박멸 및 복구 그리고 사후활동 등이 있습니다.
준비:
네트워크의 방어 수준을 정기적으로 평가하고 테스트하여 취약점을 식별해야 함.
예방책으로 패치 시스템(소프트웨어 최신 상태), 호스트 보안(컴퓨터의 보안 강화), 네트워크 보안(네트워크의 범위 보안), 사용자 인식 개선 및 교육 등이 있습니다.
탐지 및 분석:
공격을 탐지하는 확률을 높이기 위해서는 네트워크 보안 인력의 많은 노력이 필요합니다.
공격의 징후로 백신 프로그램의 경고, 비정상적으로 느려진 인터넷, 비정상적인 네트워크 트래픽이 있습니다.
봉쇄, 박멸 및 복구:
침해가 발생하면 피해를 최소화하기 위해 반드시 통제해야 합니다.
일부 봉쇄 방안으로는 침해당한 컴퓨터의 시스템 전원 끄기, 네트워크 연결 차단, 장비의 일부 기능 비활성화 등이 있습니다.
일단 공격이 식별되고 봉쇄되면, 악성코드나 침해된 계정 등 잠재적으로 위험한 요소들을 제거해야 합니다.
사후활동:
침해사고 후에 사고에 대해 검토하여 회사 전체에서 예전에 놓쳤던 부분을 확인하고 개선할 부분을 찾아야 합니다.
5. 네트워크 증거와 수사
해커들은 보통 공격대상으로 이어지는 네트워크 경로를 거치거나 통과해야 합니다. 따라서, 그 경로에는 증거가 있을 가능성이 있으며 공격자를 추적하거나 식별하는 과정에서 매우 핵심적입니다.
조사할 때에는 이렇게 네트워크 경로에 있는 장비를 최대한 많이 포함시켜야 합니다.
라우터나 서버같이 경로에 있는 장비는 매우 중요한 정보를 저장하고 있을 수 있으니 간과해서는 안됩니다.
라우터에는 증거가 저장되어 있을 가능성이 있을 뿐만 아니라 해커의 공격대상이기 합니다.
라우터는 휘발성이니 주의해야 합니다.
로그파일
네트워크에 있는 많은 기기와 컴퓨터는 이벤트와 활동 로그를 생성합니다. 그래서 네트워크 조사에 있어서 로그 파일에 주로 증거가 있습니다.
중요한 로그로는 인증, 프로그램, 운영체제, 방화벽 로그 등이 있습니다.
인증 로그:
특정 이벤트와 연관이 있는 계정을 식별합니다.
프로그램 로그:
날짜와 시간뿐만 아니라 프로그램 식별자도 기록합니다.
날짜/시간 정보는 프로그램이 언제 시작되었고, 얼마나 사용되었는지 보여줍니다.
운영체제 로그:
시스템 재부팅뿐만 아니라 어떤 기기를 사용했는지 추적합니다.
또한, 운영체제 로그는 네트워크의 활동 패턴과 비정상 활동을 인지하는데 유용합니다.
라우터나 방화벽 같은 장비가 생성된 로그 또한 조사할 가치가 있습니다.
(라우터 로그에는 유용한 정보가 많이 저장되어 있을 수 있기 때문이죠!)
요청된 URL
서버 이름
서버 IP 주소
클라이언트의 URL
클라이언트의 IP 주소
누가 언제 로그인했는지에 대한 기록
※라우터에서 증거를 수집하려고 할 때에는 최대한 라우터에 영향을 주지 않는 것이 매우 중요합니다.
그래서, 네트워크에서 라우터에 접속하는 대신에 라우터의 콘솔에 직접 접속하는 것이 훨씬 좋은 방법입니다.
=> 즉, 데이터를 잠재적으로 변조시킬 수 있는 그 어떤 명령어도 피해야 합니다.
ex. "configuration" 명령어 대신에 "show" 명령어 사용하는 것이 좋습니다.
네트워크 조사 툴
네트워크에서 돌아다니는 트래픽(패킷)에 중요한 단서가 있을 수 있습니다.
이 때, 네트워크 트래픽을 캡쳐하고, 분석할 수 있는 툴을 "스니퍼"라고 부르는데 여러 가지 툴이 있습니다.
그런데, 0xFFFFFF로 흰색을 나타내는 부분에서 FF가 아닌 FE로 되어 있는 모습이 보입니다.
스테가노그래피에서 LSB 변조가 있는데, 최하위 비트를 바꿔서 메시지를 숨기는 방식입니다.
비트가 바뀌어 이미지가 변조되어도,
육안으로 보기에 0xFFFFFF와 0xFFFFFE의 색차이를 잘 느끼지 못합니다.
FF는 1111 1111
FE는 1111 1110
이므로, 둘의 차이점은 최하위 비트입니다.
그래서 FF는 1, FE는 0으로 볼 수 있습니다.
바꿔보면,
FE FF FE FE FF FF FF FE FE FF FE FE FF FF FF FE FE FF FE FE FE FF FE FE FE FF FF FF FF FE FF FF FE FF FF FE FF FF FE FE FE FF FF FE FF FE FE FF FE FF FF FF FE FE FF FF FE FF FF FF FE FF FE FE FE FF FF FE FE FF FE FF FE FF FF FE FF FF FF FE FE FF FE FF FF FF FF FF FE FF FF FE FF FF FE FE FE FF FF FE FF FE FE FF FE FF FF FF FE FE FF FF FE FF FF FF FE FF FE FE FE FF FF FE FE FF FE FF FE FF FF FE FF FF FF FE FE FF FE FF FF FF FF FF FE FF FE FE FF FE FE FF FE FF FE FE FE FE FF FF FE FF FE FE FE FE FE FF FE FF FE FE FF FF FF FE FE FF FE FF FF FF FF FF FE FF FF FE FF FF FE FE FE FF FF FE FF FE FE FF FE FF FF FF FE FE FF FF FE FF FF FF FE FF FE FE FE FF FF FE FE FF FE FF FE FF FF FE FF FF FF FE FE FF FF FF FF FF FE FF
array = "FE FF FE FE FF FF FF FE FE FF FE FE FF FF FF FE FE FF FE FE FE FF FE FE FE FF FF FF FF FE FF FF FE FF FF FE FF FF FE FE FE FF FF FE FF FE FE FF FE FF FF FF FE FE FF FF FE FF FF FF FE FF FE FE FE FF FF FE FE FF FE FF FE FF FF FE FF FF FF FE FE FF FE FF FF FF FF FF FE FF FF FE FF FF FE FE FE FF FF FE FF FE FE FF FE FF FF FF FE FE FF FF FE FF FF FF FE FF FE FE FE FF FF FE FE FF FE FF FE FF FF FE FF FF FF FE FE FF FE FF FF FF FF FF FE FF FE FE FF FE FE FF FE FF FE FE FE FE FF FF FE FF FE FE FE FE FE FF FE FF FE FE FF FF FF FE FE FF FE FF FF FF FF FF FE FF FF FE FF FF FE FE FE FF FF FE FF FE FE FF FE FF FF FF FE FE FF FF FE FF FF FF FE FF FE FE FE FF FF FE FE FF FE FF FE FF FF FE FF FF FF FE FE FF FF FF FF FF FE FF"
binary = array.replace(" ", "").replace("FF", "1").replace("FE", "0")
print(binary)