933. 패킷 단편화 오프셋 중첩 검증 방화벽
핵심 인사이트 (3줄 요약)
- 단편화(Fragmentation) 악용: 해커는 방화벽(IDS)의 탐지를 피하기 위해 악성 패킷을 여러 조각으로 나누고, 조각 번호(오프셋)를 고의로 조작해 겹치게 만듭니다.
- 방화벽 우회와 서버 공격: 단순한 방화벽은 겹쳐진 조각을 개별적으로 검사해 통과시키지만, 목적지 서버가 이를 재조립할 때 오프셋이 겹치면서 악성코드가 실행되거나 시스템이 다운(Teardrop 공격)될 수 있습니다.
- 재조립 및 오프셋 중첩 검증: 차세대 방화벽과 IDS는 패킷 조각을 메모리에 모아 직접 완전 재조립(Stateful Reassembly)해 보며, 오프셋 번호가 비정상적으로 겹치는(Overlapping) 패킷은 즉시 차단(Drop)합니다.
Ⅰ. 패킷 단편화 (Fragmentation)와 해커의 눈속임 🌟
네트워크 MTU(최대 전송 단위, 보통 1500바이트)보다 큰 데이터는 잘게 쪼개서 보낸 뒤 목적지에서 합칩니다. 해커는 이 성질을 악용해 **IDS(침입 탐지 시스템) 우회 공격(Evasion Attack)**을 감행합니다.
해커의 악랄한 조각내기 공격 (Teardrop, 겹침 공격)
- 해커가
HACKING이라는 악성코드를 탐지기(IDS) 몰래 서버로 보내려 합니다. - 정상 조각: [1번 조각:
HA] ➜ [2번 조각:CK] ➜ [3번 조각:ING] - 해커의 조작 (오프셋 중첩, Overlapping): 해커가 조각의 시작 위치(Offset) 번호를 고의로 꼬아버립니다.
- [1번 조각: 시작=0,
HAC] - [2번 조각: 시작=2,
XXX] (원래 3부터 시작해야 하는데 2부터 시작하게 조작) - [3번 조각: 시작=3,
KING]
- [1번 조각: 시작=0,
- 방화벽은 조각을 검사할 때 "어? HAC? 정상 단어네! XXX? 정상 단어네!" 하고 다 통과시켜 버립니다. 하지만 진짜 서버가 조각을 퍼즐처럼 조립(조합)할 때는 오프셋이 겹치면서 덮어쓰기가 발생해 최종적으로 서버 메모리에는 악성코드인
HACKING이 부활하여 코드가 실행되거나, 서버가 겹친 퍼즐을 맞추려다 뇌정지가 와서 블루스크린이 뜨며 죽어버립니다(Teardrop 공격).
[ 정상 단편화 (Normal Fragmentation) ]
패킷 1 (Offset 0): ┌─H─┬─A─┐
패킷 2 (Offset 2): ┌─C─┬─K─┐
패킷 3 (Offset 4): ┌─I─┬─N─┬─G─┐
조립 결과: H A C K I N G
[ 오프셋 중첩 공격 (Overlapping Fragmentation Attack) ]
패킷 1 (Offset 0): ┌─H─┬─A─┬─C─┐
패킷 2 (Offset 2): ┌─X─┬─X─┬─X─┐ (Offset 2부터 고의적 겹침)
패킷 3 (Offset 3): ┌─K─┬─I─┬─N─┬─G─┐
방화벽(단순스캔): "HAC" 통과, "XXX" 통과, "KING" 통과 (개별 조각은 무해해 보임)
서버 최종 재조립: H A C K I N G (겹쳐 쓰여지며 악성코드 완성!)
📢 섹션 요약 비유: 해커가 경찰(방화벽) 몰래 '저격총(악성코드)'을 밀반입하기 위해 총을 여러 부품(단편화)으로 분해합니다. 그리고 조립 설명서(오프셋)를 교묘하게 조작해 부품들이 겹치게 포장합니다. 멍청한 경찰은 개별 부품만 보고 장난감인 줄 알고 통과시키지만, 은행(서버) 안에서 조립 설명서대로 부품을 억지로 끼워 맞추다 보면 진짜 저격총이 완성되어버리는 사기극입니다.
Ⅱ. 방화벽/IDS의 방어 원리: 재조립 및 오프셋 검증 🌟
똑똑한 차세대 방화벽(NGFW)이나 IDS(Snort, Suricata 등)는 이 꼼수를 박살 내기 위해 깐깐한 모니터 룰(Rule)을 켭니다.
1. 상태 유지 및 완전 재조립 (Stateful Reassembly)
- 쪼개진 패킷(Fragment)이 들어오면, 옛날 방화벽처럼 한 조각씩 보고 바로바로 통과시켜 주지 않습니다.
- 방화벽 뱃속 임시 메모리에 1번, 2번, 3번 조각을 싹 다 가둬두고, 자기가 서버인 것처럼 직접 퍼즐을 100% 하나로 조립(Reassembly)해 봅니다.
- 조립이 완성된 거대한 덩어리(페이로드) 상태에서 정규표현식(Regex)을 돌려
HACKING이라는 악성 패턴(시그니처) 글씨가 있는지 엑스레이 스캔을 돌려 적발해 냅니다.
2. 비정상 오프셋 중첩 검증 룰 (Offset Check) 🌟
- 퍼즐을 맞추는 과정에서, 1번 패킷의 꼬리 번호(예: 100번 끝)와 2번 패킷의 머리 번호(예: 오프셋 90번 시작)가 10바이트나 겹쳐서 포개진다는 사실(Overlapping)을 적발합니다.
- 정상적인 통신에서는 절대 발생할 수 없는 상황이므로, IDS는 패턴을 검사할 필요도 없이 "이 새끼 해커다!"라고 결단(룰 매치)하고 조각난 패킷 전체 그룹을 그 자리에서 찢어서 폐기(Drop)해버립니다.
📢 섹션 요약 비유: 베테랑 경찰(차세대 방화벽)은 택배 박스(패킷 조각)가 오면 바로 통과시키지 않습니다. 일단 창고(메모리)에 다 잡아두고 경찰이 직접 바닥에 늘어놓고 설명서대로 조립을 시도해 봅니다. 조립하다가 "어? 이 부품이랑 저 부품 구멍이 왜 이렇게 비정상적으로 겹치지?" 하고 중첩(Overlapping)을 발견하면, 안에 무엇이 들었는지 볼 필요도 없이 즉각 택배차를 압수해 불태워버리는 철통 방어망입니다.
Ⅲ. IDS 우회 방어망의 트레이드오프 (성능 저하)
단편화 공격을 완벽하게 방어하는 데에는 치명적인 약점과 트레이드오프가 존재합니다.
- 방화벽 자원 고갈 공격 (리소스 소모): 단편화 패킷을 다 모아서 조립하려면 방화벽의 CPU 연산량과 RAM 메모리가 미친 듯이 소모됩니다(병목 지표).
- 해커가 이를 노리고 1번 조각만 수백만 개를 쏘고 2번 조각을 일부러 안 보내면, 방화벽이 1번 조각들을 쥐고 한없이 기다리다가 메모리가 터져서 다운될 수 있습니다.
- 해결책 (Timeout Drop): 이를 막기 위해 방화벽은 "3초 안에 퍼즐 조각이 전부 안 오면 다 찢어버려!"라는 타임아웃 룰(Timeout Drop) 방어 시그니처 템플릿을 필수로 장착하여 메모리를 보호합니다.
📢 섹션 요약 비유: 베테랑 경찰이 모든 택배 박스를 창고에 모아두고 일일이 조립하다 보면 창고(메모리)가 금방 꽉 차고 경찰(CPU)이 지쳐 쓰러집니다. 해커가 이를 노리고 첫 번째 부품 박스만 수만 개를 보내면 경찰서가 마비됩니다. 그래서 경찰서에는 "3일 안에 나머지 부품이 안 오면 보관 중인 박스도 몽땅 폐기처분해라!"라는 엄격한 창고 비우기 규칙(Timeout)이 마련되어 있습니다.
👶 어린이를 위한 3줄 비유 설명
- 해커의 퍼즐 섞기: 나쁜 악당이 무서운 공룡 그림을 여러 퍼즐 조각으로 자른 다음, 조각들이 서로 겹쳐지게 번호를 엉터리로 써서 택배를 보내요.
- 바보 경비원 속이기: 바보 경비원은 조각을 하나씩만 보고 "그냥 종이 조각이네~" 하고 통과시켜주는데, 집에서 퍼즐을 억지로 다 맞추면 무서운 공룡이 튀어나와서 집을 망가뜨려요!
- 똑똑한 경비원의 방어: 똑똑한 경비원은 퍼즐 조각을 모아서 직접 맞춰보고, "어? 퍼즐 번호가 이상하게 겹치잖아!" 하고 속임수를 눈치채면 바로 쓰레기통에 던져버려서 우리를 지켜준답니다.