Computer Science/Linux Command Line
tcpdump 코드 해석하기 (BPF Door)
c4fiber
2025. 5. 12. 17:39
BPF Door 공격에 대해 찾아보면서 대응 방법 중 "Magic Sequence"를 검색하는 방법에 대해 알게되었다.
sudo tcpdump -i eth0 'tcp[((tcp[12] & 0xf0) >> 2):4] = 0x1234abcd'
이 코드를 분석해보면 'tcp[((tcp[12] & 0xf0) >> 2):4] = 0x1234abcd' 에 해당하는 데이터가 발견되면 catpure 하라는 뜻이다.
- tcp[12] : data offset(4bit) + Reversed(3bit) + NS (1bit)
- data offset 부분은 tcp packet의 헤더의 길이를 32bit(4byte) 단위로 알려준다.
- 4bit 이므로 값이 0x4 라면 해당 TCP 패킷의 크기는 16byte라는 뜻
- (tcp[12] & 0xf0) >> 2
- tcp[12] 는 1바이트 크기 이므로 상위 4bit를 뽑아내기 위해 0xf0 (0b11110000) 와 AND 연산 수행
- 이후 >> 4 를 해서 bit를 뽑아낸 뒤에 4를 곱하기 위해 << 2 연산을 수행해야 한다.
- 이를 합쳐서 >> 2 연산만 수행한다. (전통 BPF 표현식에서는 << 연산이 없어서 불가능 하기도 하다.)
- tcp[((tcp[12] & 0xf0) >> 2):4]
- :4 문법을 통해서 4byte만 읽어낸다. (python 의 slicing 과는 다르다.)
- 이를 통해서 TCP payload 의 첫 4byte를 읽어낼 수 있다.
- tcp[((tcp[12] & 0xf0) >> 2):4 = 0x1234abcd
- TCP payload 의 첫 4byte를 추출해서 0x1234abcd (magic sequence로 추정되는 값) 이 확인되면 capture!
최근 SKT USIM 데이터 유출로 인해 BPF Door 공격에 대해서 알아보는 중이였는데 간단한 명령어를 파싱해보면서 특징을 기억에 남길 수 있을 것 같다.