All posts by RSR

WinDivert – Windows Packet Divert

사실은 이거 우회하는거 프로그램으로 만드려다 알게된 드라이버

윈도 방화벽은 단순히 포트나 어플리케이션 단위로만 컨트롤이 되서 TCP Flags 기준으로 필터링하지 못한다.
원 드라이버 홈페이지 https://reqrypt.org/windivert.html
여기는 파이썬으로 래핑해놨다.

pip로 바로 설치가능

 pip install pydivert

간단하게 작성한 rst 제거 스크립트

import pydivert

with pydivert.WinDivert("inbound and tcp.Rst and tcp.Ack") as w:
    for packet in w:
        packet.tcp.rst=False
        w.send(packet)

WinDivert를 이용하면 뭔가 나중에 재밌는걸 만들어 볼 수 있을것 같다.

warning.or.kr season 2

엊그제부터 인터넷 도감청이 이슈다.
이전에는 HTTP프로토콜의 HOST 헤더를 확인함을 분석하여 HTTPS를 사용하는경우 우회가 가능하였다. (이전분석)

이번에는 HTTPS를 사용하더라도 접속이 안되는것을 확인, 분석하였다.

유명한 성인사이트 접속시 HTTPS 접속임에도 ERR_CONNECTION_RESET에러가 뜨며 접속이 거부되었다.

Wireshark 패킷을 확인해보니

Client Hello 이후 RST, ACK패킷이 확인된다.
중요한점은 RST 패킷 이후에도 Server Hello가 확인된다.
이는 서버에서 정상적으로 응답하나 중간에 어떤xx가 RST패킷을 보내는것으로 추정된다.
TCP Reset Attack 의 일종이다.

RST패킷을 보내는 기준으로는 TLS패킷의 Server Name Indication extension (SNI)로 보여진다.

GDNS를 통해 원본의 IP주소를 확인하고 /etc/hosts파일을 수정하여 test.com으로 접속시 대상의 서버로 접속하게 만들어 보았다.
이후 https://test.com 접속시 다음과 같은 패킷을 확인할 수 있다.


목적지로부터 정상적인 응답이다.

하지만 서버는 301 Moved Permanently 응답을 보내며 원본의 도메인으로 Redirect 시켜버리며 다시 Client Hello는 reset 되어버린다.

서버는 정상적으로 응답하는것을 재차 확인하였고
중간에 날라오는 RST, ACK를 잘 처리하면 (iptables -I INPUT -p tcp –tcp-flags ALL RST,ACK -j REJECT –reject-with tcp-reset)

우회하여 접속할 수 있다.

Android analysis

disable DM-Verity

mod fstab file in initrd of boot.bin
delete “verify” option in mount option field

set SELinux permissive

add below to kernel cmdline
enforcing=0 androidboot.selinux=permissive

useful adb command

Get Activity List
dumpsys package | grep -i [app_id] | grep Activity

Run Activity
am start -a android.intent.action.MAIN -n [app_id]/.activities.xxxx [-e extra_id extra_value]

extract bootimg
abootimg -x boot.bin

modding kernel ramfs
to extract
cat initrd | gunzip | cpio -vid
to merge
find ./ | sort | cpio -o -H newc | gzip -9 > ../new_initrd
make bootimg
abootimg –create new_boot_su.bin -f bootimg.cfg -k zImage -r new_initrd -s stage2.img

restart zygote
killall zygote ## 가끔 잘안됨
setprop ctl.restart zygote

 

Start adbd via commandline

setprop service.adb.tcp.port 5555
settings put global development_settings_enabled 1
settings put global adb_enabled 1
start adbd

adb push adbkey.pub /data/misc/adb/adb_keys

https://stackoverflow.com/questions/26213954/how-to-solve-adb-device-unauthorized-in-android-adb-host-device

useful tools

jadx
JEB