본문 바로가기

보안

(15)
ARP Spoofing(recover 시점 파악, packet relay) 1. sender에서 infect가 풀리는(recover가 되는) 시점을 정확히 파악하여 재감염 시키기 첫번째 경우sender에서 arp request를 보내는 경우 -> target이 arp reply를 보내면 감염 풀림=> arp request는 broadcast니까 attacker에게도 오기 때문에 탐지 가능=> 다시 공격하면 됨 두번째 경우target이 arp request를 보내는 경우 -> sender가 arp reply를 보내면 감염 풀림=> arp request는 broadcast니까 attacker에게도 오기 때문에 탐지 가능=> 다시 공격하면 됨 세번째 경우 (arp poll)요즘은 캐시 만료 몇 초 전에 arp table에 있는 주소로 unicast  확인 arp request를 보냄..
ARP table infection ARP(Address Resolution Protocol) 프로토콜은 네트워크 상 IP주소를 MAC주소로 대응시키기 위해 사용하는 프로토콜이다.이를테면, IP 호스트 A가 IP 호스트 B에게 IP 패킷을 전송하려고 할 때 IP 호스트 B의 물리적 네트워크 주소를 모른다면, ARP 프로토콜을 사용하여 목적지 IP 주소 B와 브로드캐스팅 물리적 네트워크 주소 FFFFFFFFFFFF를 가지는 ARP 패킷을 네트워크 상에 전송한다. IP 호스트 B는 자신의 IP 주소가 목적지에 있는 ARP 패킷을 수신하면 자신의 물리적 네트워크 주소를 A에게 응답한다. 이와 같은 방식으로 수집된 IP 주소와 이에 해당하는 물리적 네트워크 주소 정보는 각 IP 호스트의 ARP 캐시라 불리는 메모리에 테이블 형태로 저장된 다음, ..
[드림핵/암호학] Double DES #!/usr/bin/env python3from Crypto.Cipher import DESimport signalimport osif __name__ == "__main__": signal.alarm(15) #15초 제한 시간 with open("flag", "rb") as f: flag = f.read() key = b'Dream_' + os.urandom(4) + b'Hacker' key1 = key[:8] #key의 앞 8바이트, 뒤 2바이트는 모름 key2 = key[8:] #key의 뒤 8바이트, 앞 2바이트는 모름 print("4-byte Brute-forcing is easy. But can you do it in 15 seconds?")..
[자동차해킹] 1. UNDERSTANDING THREAT MODELS Finding Attack Surfaces데이터가 차량에 들어올 수 있는 모든 방법, 즉 차량이 외부 세계와 통신하는 모든 방법을 알아야 한다. > 차량 외부 조사 시 확인할 것- 신호가 어떻게 수신되나? 전파? Key fobs? 거리 센서?- 물리적 키패드 접근이 있나?- 터치나 모션 센서가 있나?- 전기차면, 어떻게 충전되나? > 차량 내부 조사 시 확인할 것- 오디오 입력 옵션은 무엇이 있나? CD? USB? Bluetooth?- 진단 포트가 있나?- 대시보드의 기능은 무엇인가? GPS? Bluetooth? Internet? 이렇게 다양한 방법으로 들어오는 데이터가 잘못되었거나 악의적이라면? -> threat modeling 필요 Threat Modeling- 위협 모델링을 할 때는 목표의 아키텍처..
[시스템해킹] PIE ASLR이 적용되면서 바이너리 실행 시마다 스택, 힙, 공유 라이브러리 등이 무작위 주소에 매핑되었지만 main의 주소는 항상 동일했음-> 고정된 주소의 코드 가젯을 활용한 ROP 공격이 가능했음 PIE(Position-Independent Executable): ASLR이 코드 영역에도 적용되게 해주는 기술PIC(Position-Independent Code)- 리눅스에서 ELF는 실행 파일(executable)과 공유 오브젝트(shared object, SO)로 두 가지 존재- 공유 오브젝트는 기본적으로 재배치가 가능하도록 설계 -> 메모리의 어느 주소에 적재되어도 코드의 의미가 훼손되지 않음  => 이런 성질의 코드를 PIC라 함 PIE(Position-Independent Executable)- ..
[시스템해킹] Return Oriented Programming(ROP); ret2main 함수 실행 후 main으로 다시 돌아가게 가젯 구성; GOT overwrite 안해도 쉘 획득 가능임  basic_rop_x86-> 이번엔 32비트임, canary X 32비트 함수 호출 규약- rdi, rsi 등 레지스터로 인자를 전달해주던 64비트와 달리 32비트는 스택으로 전달해줌- x86 바이너리에서 pop 명령어의 피연산자는 중요하지 않다고.. - 인자 2개 필요하면 pop; pop; ret 이런 가젯을 찾아야 한다고.. 익스플로잇       - puts_plt 구해서 read 함수 실제 주소 구하고 main으로 return- x86 함수 호출 규약 알아야 함- 함수 인자 개수만큼 pop 필요- 지금 보니까 ret 가젯은 필요 없고- 첫번째 payload로 구한 read 주소를 이용해 libc ..
[시스템해킹] Return Oriented Programming(ROP); GOT Overwrite - ASLR이 걸린 환경에서 system 함수를 사용하려면 프로세스에서 libc가 매핑된 주소를 찾고, 그 주소로부터 system 함수의 오프셋을 이용하여 함수의 주소를 계산해야 함 ROP: 리턴 가젯을 사용하여 복잡한 실행 흐름을 구현하는 기법 코드// Name: rop.c// Compile: gcc -o rop rop.c -fno-PIE -no-pie#include #include int main() { char buf[0x30]; setvbuf(stdin, 0, _IONBF, 0); setvbuf(stdout, 0, _IONBF, 0); // Leak canary puts("[1] Leak Canary"); write(1, "Buf: ", 5); //..
[시스템해킹] Return to Library Return to Library: 라이브러리 함수로 NX를 우회하고 셸을 획득하는 공격 기법 rtl.c// Name: rtl.c// Compile: gcc -o rtl rtl.c -fno-PIE -no-pie#include #include #include const char* binsh = "/bin/sh";int main() { char buf[0x30]; setvbuf(stdin, 0, _IONBF, 0); setvbuf(stdout, 0, _IONBF, 0); // Add system function to plt's entry system("echo 'system@plt'"); // Leak canary printf("[1] Leak Canar..