Optik ağ terminalleri (ONTS), fiber optik sinyalleri tipik yönlendiriciler tarafından işlenebilen Ethernet sinyallerine dönüştüren cihazlardır. Ev ve iş ağları arasındaki internet hizmet sağlayıcılarının (ISS) fiber optik ağlarına bağlantı olarak, genellikle ISS’ye özgü yapılandırmalar ve şifreler içeren özel ürün yazılımı yüklenir.
Hack GPon ve Hacking RTL960X gibi siteler çok sayıda ONT modeline nasıl erişileceğini belgeliyor. Telnet veya Web Konsolu üzerinden Singtel’in ZTE ZXA10 F620G’ye nasıl erişileceğine dair bir blog yazısı bile var.
Son zamanlarda, İnternet aboneliklerini değiştirdim ve artık Link-All-All-G150-C Ont’ime ihtiyaç duymadım. Model hiçbir yerde belgelenmediğinden, bunun bazı donanım hacklemelerini uygulamak için harika bir fırsat olduğunu düşündüm.
LAU-G150-C, bir pasif optik ağ (PON) giriş bağlantı noktası, bir Ethernet çıkış bağlantı noktası ve basit bir güç düğmesine sahip Huawei HG8010H’ye son derece benziyor.
Bununla birlikte, Hack GPON’da belgelenen modellerin çoğunun aksine, LAU-G150-C’nin makul derecede sertleştiği görülmüştür. İlk olarak doğrudan Ethernet üzerinden bağlandım ve tipik sert kodlu statik IP’leri denedim 192.168.100.1
Ve 192.168.10.1
(ONTS genellikle DHCP’ye hizmet etmez), ancak açıkta olan herhangi bir bağlantı noktası bulamadı veya cihazı ping atamadı.
Bu nedenle, bir donanım arayüzü aramaya karar verdim. Kapağı çıkarmak için önemli çaba sarf etti ve gecikmiş bir şekilde, tüm bu soruna neden olan bir etiketin altında gizli bir vida olduğunu fark ettim.
Donanım Hacking Sıcak İpucu #1: Çıkartmaların altındaki gizli vidaları kontrol edin!
Tüm bu zor işten sonra, sulu bir yıkımla ödüllendirildim!
Bileşenlerin çoğunu tanımlayabilmemde, işlemci (üst görünümün sol alt kısmındaki ısı lavabosunun altında gizli) etiketlenmemişti. Bu, hedefleyebileceğim herhangi bir hata ayıklama arayüzü olup olmadığını anlamayı zorlaştırdı.
Neyse ki, tahtaya daha yakından bakmak, bazı ilgili limanları ortaya çıkardı…
Etiketli bağlantı noktaları GND
– RX
Ve TX
potansiyel bir UART arayüzünü önerdi, ancak SCL
Ve SDA
potansiyel bir I2C arayüzü belirtti.
Multimetre ile çalıştım ve yer bağlantı noktalarını doğruladım, ancak RX bağlantı noktası için okumalar görünüyordu. Daha da kötüsü, bağlantı noktalarını bir mantık analizörü ile test ettiğimde, tam anlamlı oldum! 115200 Hz gibi diğer ONT’ler için tipik baud oranları hiçbir şey açığa vuramadı.
Bir gün sonra hatamı fark ettim: Sinyalleri her seferinde bir bağlantı noktası analiz etmeye çalışıyordum. Sadece zemini ve RX bağlantı noktalarını aynı anda bağladığımda 115200 Hz’de tanınabilir veriler aldım. Büyük başarı!
Donanım Hacking Sıcak İpucu #2: Seri arabirim bağlantı noktalarını tek başına analiz etmeyin!
Cihazı açarken, önce önyükleyiciyi ortaya çıkarır:
9601D
PRELOADER Bismarck 3.5
II: LPLR:1012, PLR:9aa5a8d9, Build_date:21080422, Toolkit:rsdk-1.5.6-5281-EB-2.6.30-0.9.30.3-131105
II: Disable OCP Timeout Monitor
II: Disable LX Timeout Monitor
II: TLB initial done:
.ro section works!
.text and .ro sections work!
EE: REG32(0xbb000044)[3:2]:0x2 !=0
II: Enable Triple Synchronizer
II:cg_cpu_clk_init done
II: CPU 300MHz (600/2/0), MEM 325MHz, LX 200MHz, SPIF 25MHz
AK: DRAM AUTO CALIBRATION(20210202)
AK: ZQ Calibration Passed
AK: ZQ Calibration Passed
AK: ZQ Calibration Passed
AK: ZQ Calibration Passed
AK: MR0: 0x00100952
AK: MR1: 0x00110040
AK: MR2: 0x00120000
AK: MR3: 0x00130000
AK: clear dwdqor
AK: Bit/max_r_s/max_r_l/max_w_s/max_w_l Bit/max_r_s/max_r_l/max_w_s/max_w_l(Hex)
[ 0] 0 1f 0 17 [16] 0 1f 0 17
[ 1] 0 1f 0 17 [17] 0 1f 0 17
[ 2] 0 1f 0 15 [18] 0 1f 0 15
[ 3] 0 1f 0 15 [19] 0 1f 0 15
[ 4] 0 1f 0 17 [20] 0 1f 0 17
[ 5] 0 1f 0 15 [21] 0 1f 0 17
[ 6] 0 1f 0 17 [22] 0 1f 0 17
[ 7] 0 1f 0 17 [23] 0 1f 0 17
[ 8] 0 1f 0 17 [24] 0 1f 0 17
[ 9] 0 1f 0 19 [25] 0 1f 0 19
[10] 0 1f 0 17 [26] 0 1f 0 19
[11] 0 1f 0 19 [27] 0 1f 0 19
[12] 0 1f 0 19 [28] 0 1f 0 19
[13] 0 1f 0 19 [29] 0 1f 0 19
[14] 0 1d 0 1b [30] 0 1f 0 1b
[15] 0 1f 0 17 [31] 0 1f 0 17
AK: DQ enable delay sync with DQ delay tap.
0xb80015D0=0x07070707, 0xb80015D4=0x07070707, 0xb80015D8=0x08070807, 0xb80015DC=0x07090808
AK: DRAM size = 0x2000000
AK: Disable read after write function
AK: Support tREFI divided by 4
AK: dram auto calibrtaion is done
II: MEM_PROBE_OK
II: MEM_XLAT_OK
II: MEM_TO_REG_OK
II: MEM_CAL_OK
II: Change Stack from 0x9f00375c to 0x806fffe0
II: U-boot Magic Number is 0x27051956
II: Inflating U-Boot (0x80700040 -> 0x81c00000)… OK
II: Starting U-boot…
U-Boot 2011.12.NA-svn35647 (Aug 04 2021 - 22:50:21)
Board: RTL9601D, CPU:300MHz, LX:200MHx, MEM:325MHz, Type:DDR2
DRAM: 32 MB
SPI-NAND Flash: 2C14/Mode0 1x128MB
Create bbt:
Loading 16384B env. variables from offset 0xc0000
Loading 16384B env. variables from offset 0xe0000
Loaded 16384B env. variables from offset 0xc0000
Net: LUNA GMAC
Warning: eth device name has a space!
Hit any key to stop autoboot: 1
Bu, kart (RTL9601D) ve SPI-nand flaş depolama gibi önemli bilgileri ortaya çıkardı.
Autoboot kesintiye uğramadıysa, gerçek Linux işletim sistemine geçti:
## Booting kernel from Legacy Image at 81000000 …
Image Name: Linux Kernel Image
Created: 2024-10-16 8:49:19 UTC
Image Type: MIPS Linux Kernel Image (lzma compressed)
Data Size: 909109 Bytes = 887.8 KB
Load Address: 80000000
Entry Point: 80000000
Verifying Checksum … OK
Uncompressing Kernel Image … OK
Starting kernel …
...
BusyBox v1.12.4 (2024-10-16 16:46:28 CST) built-in shell (ash)
Enter ‘help’ for a list of built-in commands.
#
Kabuk kilidi açıldı!
Bir UART kabuğu çok fazla görünürlük kazandırırken, hala cihazı neden doğrudan ağ bağlantısına ping yapamayacağımı anlamak istedim.
Maruz kalan ağ arayüzlerini kontrol ettim:
# ip addr
1: lo: mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:80:05 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
2: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether > brd ff:ff:ff:ff:ff:ff
3: eth0.2: mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 00:00:00:01:00:02 brd ff:ff:ff:ff:ff:ff
4: eth0.3: mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 00:00:00:01:00:02 brd ff:ff:ff:ff:ff:ff
5: nas0: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 00:00:00:01:00:02 brd ff:ff:ff:ff:ff:ff
6: pon0: mtu 1500 qdisc noop state DOWN qlen 1000
link/ether brd ff:ff:ff:ff:ff:ff
7: br0: mtu 1500 qdisc noop state DOWN
link/ether brd ff:ff:ff:ff:ff:ff
8: nas0_0: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 10
link/ether brd ff:ff:ff:ff:ff:ff
İlginç bir şekilde, Ethernet arayüzü eth0
Bir IP adresi seti yoktu, ancak bunu manuel olarak yapmak ip addr add 192.168.100.1/24 dev eth0
hala ulaşılabilir hale getiremedi.
Bağlantıyı bağlı dizüstü bilgisayarımda Wireshark kullanarak izlediğimde, ont’tan dizüstü bilgisayarıma ping atmanın çalıştığını fark ettim – ancak dizüstü bilgisayarım ping’e cevap verse de, ONT paketi almamış gibi görünüyor.
Bir sonraki içgüdüm, güvenlik duvarı kurallarını kontrol etmekti. iptables
:
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp — anywhere anywhere tcp dpt:http
DROP udp — anywhere anywhere udp dpt:http
DROP tcp — anywhere anywhere tcp dpt:telnet
DROP udp — anywhere anywhere udp dpt:telnet
ACCEPT udp — anywhere anywhere udp dpt:router
DROP all — anywhere 239.255.255.250
ACCEPT all — anywhere 224.0.0.0/4
dhcp_port_filter all — anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
TCPMSS tcp — anywhere anywhere tcp flags:SYN,RST/SYN TCPMSS clamp to PMTU
TCPMSS tcp — anywhere anywhere tcp flags:SYN,RST/SYN tcpmss match 1452:1536TCPMSS set 1452
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain dhcp_port_filter (1 references)
target prot opt source destination
Bu ilginç olsa da (iptables
Kurallar Telnet ve HTTP) düşürdü, ICMP’nin (ping için kullanılan) neden başarısız olduğu sorusunu cevaplamadı.
Biraz chatgpt konsültasyonundan sonra (lol) kontrol etmem istendi ebtables
(Katman 2 filtrelemesini kontrol eden) bunun yerine:
# ebtables -L
Bridge table: filter
Bridge chain: INPUT, entries: 1, policy: ACCEPT
-j br_wan
Bridge chain: FORWARD, entries: 1, policy: ACCEPT
-j portmapping
Bridge chain: OUTPUT, entries: 1, policy: ACCEPT
-j br_wan_out
Bridge chain: br_wan, entries: 1, policy: RETURN
-i nas0_0 -j DROP
Bridge chain: br_wan_out, entries: 1, policy: RETURN
-o nas0_0 -j DROP
Bridge chain: portmapping, entries: 9, policy: ACCEPT
-i nas0_0 -o eth0.2 -j RETURN
-i eth0.2 -o nas0_0 -j RETURN
-i eth+ -o eth+ -j RETURN
-i eth+ -o wlan+ -j RETURN
-i wlan+ -o eth+ -j RETURN
-i wlan+ -o wlan+ -j RETURN
-i eth0+ -j DROP
-i wlan+ -j DROP
-i nas0_0 -j DROP
Cevap buydu – -i eth0+ -j DROP
Ethernet arayüzünde alınan tüm yönlendirme trafiğini düşürüyordu! Bu, yönlendiriciler ve diğer cihazlar Ethernet arayüzü aracılığıyla fiber optik arayüze iletişim kurabilse de, bunu doğrudan ONT ile iletişim kurmak için kullanamayacakları anlamına geliyordu. Bu engeli basit bir şekilde temizleyebilirim ebtables -F
Ve iptables -F
Tüm filtreleme kurallarını temizlemek için.
Donanım Hacking Sıcak İpucu #3: Potansiyel sertleştirme için tüm ağ filtreleme kurallarını inceleyin!
Başka bir gotcha, ip addr
çıktı, br0
Ve eth0
aynı MAC adresini paylaşıyordu. Kısacası, ağ trafiği köprülendi ve IP katmanı trafiği br0
. Böylece statik IP adresini ayarlamam gerekiyordu br0
yerine eth0
Ve onu büyüt:
ip addr add 192.168.100.1/24 dev br0
ip link set br0 up
Bu yapıldıktan sonra, şimdi Ethernet bağlantısı üzerindeki ONT ile başka bir ağ iletişimi yapabilirim.
Sonra, koşuyu anlamak için biraz geri kazanım yaptım.
# ps
PID USER VSZ STAT COMMAND
1 admin 892 S init
2 admin 0 SW< [kthreadd]
3 admin 0 SWN [ksoftirqd/0]
4 admin 0 SW< [events/0]
5 admin 0 SW< [khelper]
8 admin 0 SW< [async/mgr]
51 admin 0 SW< [kblockd/0]
64 admin 0 SW [netlog]
69 admin 0 SW [pdflush]
70 admin 0 SW [pdflush]
71 admin 0 SW< [kswapd0]
89 admin 0 SW< [mtdblockd]
158 admin 0 SW< [yaffs-bg-1]
171 admin 2064 S configd
354 admin 24292 S omci_app -s -f off 0 -m disable -d err -
363 admin 1696 S /bin/pondetect
562 admin 900 R -/bin/sh
563 admin 592 S /bin/inetd
572 admin 2848 S /bin/hiproc
574 admin 0 DW< [led_swBlink]
610 admin 24292 S omci_app -s -f off 0 -m disable -d err -
611 admin 24292 S omci_app -s -f off 0 -m disable -d err -
612 admin 24292 S omci_app -s -f off 0 -m disable -d err -
708 admin 24292 S omci_app -s -f off 0 -m disable -d err -
709 admin 24292 S omci_app -s -f off 0 -m disable -d err -
710 admin 24292 S omci_app -s -f off 0 -m disable -d err -
711 admin 24292 S omci_app -s -f off 0 -m disable -d err -
820 admin 892 R ps
İkili dosyaların dizelerinin kontrol edilmesi, hiproc
Web konsolundan (HTML ile ilgili dizeler) sorumluydu, ancak meşgul kutusunda bulunan sınırlı ikili dosyalar nedeniyle manuel olarak kontrol etmek zorunda kaldım /proc
Hangi bağlantı noktasında olduğunu görmek için:
# cat /proc/572/net/tcp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 00000000:9CC3 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 835 1 80f36880 300 0 0 2 -1
1: 00000000:0017 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 840 1 80f36040 300 0 0 2 -1
Bu durumda, 9CC3
ondalık olmaya dönüştürülmüş 40131
! Bir tarayıcıda portuna heyecanla eriştim ve…
Yanıt hala sunucu sürümü gibi önemli bilgileri ortaya çıkardı:
HTTP/1.0 403 Forbidden
Date: Thu, 01 Jan 1970 00:17:14 GMT
Server: Boa/0.93.15
Connection: close
Content-Type: text/html
<HTML><HEAD><TITLE>403 ForbiddenTITLE>HEAD>
<BODY><H1>403 ForbiddenH1>
Your client does not have permission to get URL / from this server.
BODY>HTML>
İtme, aktardım hiproc
Futher analizi için netcat kullanarak ikili çıkış. Ben başladım Your client does not have permission to get URL
String, sonra Ghidra’daki referansları izledi.
Biraz Spelunking’den sonra, web konsolu hemen hemen devre dışı bırakılırken (herhangi bir yapılandırma dosyasına başvurmadığı), kullandığını fark ettim. /etc
sunucu kökü olarak, /etc/passwd
doğrudan ona göz atarak. Yine de, bu çok ilginç değildi çünkü zaten kabuk erişimim vardı.
Tüm yapılandırma dosyalarını ve ikili dosyaları çıkardıktan sonra, tersine mühendislik yapmak ve analiz etmek için çok daha fazlası var, ancak şimdilik daha önce açıklanmış bir ONT cihazına erişmekten oldukça memnun hissediyorum. Bu araştırma alanına girmeyi kolaylaştırmak için pratik ipuçları ile blog yazılarını hackleyen birkaç mini donanım yayınlamayı umuyorum.