Proyek ini - dan juga proyek saudaranya yang mogok - termasuk dalam rangkaian alat anti-sensor saya yang memungkinkan pengaturan shell terenkripsi yang berfungsi penuh dan penerusan TCP/UDP di lingkungan sensor yang tidak bersahabat. Forensik juga berguna untuk membuang data dari perangkat melalui UART atau adb ketika tidak ada cara lain yang tersedia.
Pencarian DNS dan sesi SSH diteruskan melalui koneksi UART ke Pi
PSC memungkinkan untuk mengenkripsi sesi shell, single- atau multip-hop, menjadi agnostik terhadap transport yang mendasarinya, asalkan dapat diandalkan dan dapat mengirim/menerima data yang dikodekan Base64 tanpa modding/filtering. Bersama dengan pty e2e yang Anda terima (misalnya di dalam port-shell), Anda dapat meneruskan koneksi TCP dan UDP, mirip dengan parameter -L
OpenSSH. Ini berfungsi secara transparan dan tanpa memerlukan alamat IP yang ditetapkan secara lokal di titik awal. Hal ini memungkinkan forensik dan penguji pena membuat koneksi jaringan misalnya melalui:
adb shell
, jika adbd
OEM tidak mendukung penerusan TCPBayangkan saja Anda memiliki sesi ppp yang tidak terlihat di dalam sesi shell Anda, tanpa rekan jarak jauh yang benar-benar mendukung ppp.
Ini berjalan di Linux, Android, OSX, Windows, FreeBSD, NetBSD dan (mungkin) OpenBSD .
PSC juga menyertakan dukungan proxy SOCKS4 dan SOCKS5 untuk melakukan sesi penjelajahan web sebenarnya melalui port-shell atau dial-up modem dari jarak jauh.
Edit Makefile
untuk mencerminkan kunci yang Anda bagikan sebelumnya, seperti yang ditentukan di bagian atas Makefile
.
Kemudian ketik saja make
di Linux dan OSX .
Di BSD Anda perlu menginstal GNU make dan memanggil gmake
.
Di Windows Anda perlu menginstal cygwin dan memilih paket gcc, gcc-g++, make
dan git
yang sesuai.
Di Linux , PSC akan menggunakan terminal semu Unix98 , di sistem lain akan menggunakan pty POSIX tetapi itu harus transparan bagi Anda. Saya pernah menambahkan dukungan 4.4BSD pty dan SunOS di zaman batu karena alasan tertentu, sehingga mungkin dibangun atau tidak bahkan dengan Solaris .
dengan bangga disponsori oleh:
Polos dan sederhana. Di kotak lokal Anda, jalankan pscl
, dan teruskan port TCP atau UDP apa pun yang ingin Anda teruskan dari situs jarak jauh ke alamat tertentu. Misalnya:
linux:~ > ./pscl -T 1234:[192.168.0.254]:22 -U 1234:[8.8.8.8]:53
PortShellCrypter [pscl] v0.60 (C) 2006-2020 stealth -- github.com/stealth/psc
pscl: set up local TCP port 1234 to proxy to 192.168.0.254:22 @ remote.
pscl: set up local UDP port 1234 to proxy to 8.8.8.8:53 @ remote.
pscl: Waiting for [pscr] session to appear ...
linux:~ >
[ UART / SSH / ... login to remote side ... ]
Di situs jarak jauh (hop terakhir) dengan sesi shell, tidak peduli apakah itu dalam port-shell, SSH, login konsol, dll, Anda menjalankan pscr
:
linux:~ > ./pscr
PortShellCrypter [pscr] v0.60 (C) 2006-2020 stealth -- github.com/stealth/psc
pscl: Seen STARTTLS sequence, enabling crypto.
linux:~ >
Setelah Anda menjalankan pscr
, kedua ujungnya membuat jabat tangan kripto dan meletakkan protokol tambahan pada sesi yang ada yang transparan bagi Anda. Anda kemudian dapat terhubung ke 127.0.0.1:1234
di kotak lokal Anda untuk mencapai 192.168.0.254:22
melalui TCP atau pemecah masalah 8.8.8.8
melalui UDP. Ini juga berfungsi dengan alamat [IPv6], jika situs jarak jauh memiliki konektivitas IPv6. Sebenarnya, Anda bahkan dapat menggunakannya untuk menerjemahkan perangkat lunak IPv4 ke IPv6, karena Anda selalu terhubung ke 127.0.0.1
di sisi lokal.
Anda dapat meneruskan beberapa parameter -T
dan -U
. Jika Anda kehilangan jejak jika sesi Anda sudah dienkripsi e2e, Anda dapat mengirim SIGUSR1
ke proses pscl
lokal, dan itu akan memberi tahu Anda.
PSC juga berguna jika Anda ingin menggunakan tor dari shell SSH jarak jauh, di mana Anda dapat meneruskan kaus kaki5 dan port DNS ke alamat host jarak jauh 127.0.0.1
. Karena SSH tidak meneruskan paket UDP, Anda biasanya menggunakan dua konektor socat
atau serupa untuk menyelesaikannya melalui node tor. PSC memiliki keuntungan dalam menjaga batas-batas datagram UDP, sementara socat
melalui SSH -L
dapat merusak batas-batas datagram dan membuat permintaan DNS salah.
Sesi ini akan dienkripsi dengan aes_256_ctr
dari PSK yang Anda pilih di Makefile
. Skema kripto ini dapat ditempa, tetapi menambahkan data AAD atau OAD akan memperbesar ukuran paket, di mana setiap byte dihitung sejak sesi interaktif dan karena pengkodean Base64, setiap karakter yang diketik sudah menyebabkan lebih banyak data yang dikirim.
Sesi UART dapat digunakan melalui screen
tetapi misalnya tidak melalui minicom
karena minicom akan membuat jendela tak terlihat dengan baris status dan bertindak seperti filter yang menghancurkan protokol PSC. PSC mencoba mendeteksi pemfilteran dan dapat bertahan dengan sejumlah data yang rusak, namun dalam beberapa situasi tidak mungkin untuk pulih. Hal serupa dengan tmux
. Anda harus menghindari menumpuk pty handler dengan PSC yang terlalu banyak mengacaukan/menangani data masuknya.
Variabel lingkungan SHELL
perlu diatur untuk pscl
dan pscr
agar PSC mengetahui shell mana yang akan dieksekusi pada pty. SHELL
diatur di sebagian besar lingkungan secara default, tetapi jika tidak, PSC perlu dijalankan seperti SHELL=/bin/bash pscl
dll.
pscl
juga mendukung penerusan koneksi TCP melalui SOCKS4 ( -4 port
) dan SOCKS5 ( -5 port
). Ini mengatur port sebagai port SOCKS untuk koneksi TCP, jadi misalnya Anda dapat menelusuri jaringan jarak jauh dari sesi port-shell tanpa perlu membuka koneksi lain selama pengujian pena. Jika Anda meneruskan -N
ke pscl
, ini mengaktifkan resolusi nama DNS di sisi jarak jauh, sehingga Anda juga dapat menggunakan chrome dengannya. Namun berhati-hatilah: Ada masalah privasi pada browser yang mencoba menyelesaikan rangkaian nama DNS saat startup yang tidak berada di bawah kendali Anda. Selain itu, jika sisi jarak jauh Anda memiliki pengaturan DNS yang rusak, shell pengetikan Anda mungkin diblokir selama beberapa detik jika paket balasan DNS hilang. Tidak ada fungsi penyelesai asinkron yang bagus yang dapat disematkan dan portabel jadi saya harus mengandalkan getaddrinfo()
di utas tunggal dengan harga kemungkinan pemblokiran selama beberapa detik jika ada masalah DNS. Itu sebabnya penyelesaian nama harus diaktifkan secara eksplisit. pscr
mencoba meminimalkan potensi masalah ini dengan cache pencarian DNS, jadi dalam sebagian besar situasi, pscr akan berfungsi tanpa kesulitan. Jika Anda meneruskan -X IP-address
(harus menjadi argumen pertama), Anda dapat mengikat proksi lokal Anda ke alamat yang berbeda dari 127.0.0.1
, sehingga Anda dapat berbagi proksi di jaringan lokal Anda.
Fitur psc memungkinkan koneksi TCP atau gumpalan data biner diteruskan dari/ke perangkat jarak jauh melalui beberapa hop bahkan jika biner pscr
tidak dapat dipasang di situs jarak jauh. Ini sangat berguna untuk tujuan forensik jika Anda tidak memiliki sarana apa pun untuk mengunduh artefak dari perangkat (misalnya telepon yang terhubung dengan UART) atau perlu meneruskan koneksi tanpa menyentuh FS agar tidak merusak bukti pada sistem atau ketika root-FS sudah terpasang dan Anda tidak dapat mengunggah kumpulan alat Anda.
Ini adalah fitur yang sangat keren, karena Anda dapat melihat koneksi TCP Anda melompat melalui tty lokal Anda ke kotak jarak jauh tanpa perlu menginstal apa pun dari jarak jauh.
Ini hanya berfungsi oleh pty punkrock lokal dan menyerahkan perintah pentalan ke pscl
yang akan dijatuhkan di shell jarak jauh (tanpa pscr
berjalan) dan beberapa keajaiban mesin negara yang menyaring dan menangani data di sisi lokal. Biasanya ini memerlukan pengaturan pty jarak jauh ke mode mentah terlebih dahulu sebelum mengeluarkan perintah sebenarnya dan beberapa detail lainnya yang diteruskan ke -B
. Argumennya dibagi menjadi beberapa bagian berikut:
:
, misalnya 1234:
.stty -echo raw
atau python -c "import tty;tty.setraw(0)"
(berhati-hatilah agar tanda kutipnya benar, karena -B
juga perlu dikutip) atau sesuatu yang serupa.pscl
untuk mulai mengirim data untuk menghindari perlombaan antara stty
yang sebenarnya terjadi dan awal cmd, misalnya echo GO
sempurna.nc 127.0.0.1 22
untuk memantulkan port lokal 1234 ke server SSH jarak jauhpscl
menyetel ulang status tty-nya. echo FIN
akan melakukannya. Direkomendasikan, karena jika tidak, Anda akan kesulitan mengenali akhir perintah Anda.;
dan diapit tanda kurung.Contoh:
Jika Anda ingin meneruskan koneksi TCP, contoh ini memerlukan stty
dan nc
yang diinstal pada perangkat, tetapi secara teoritis bisa juga hal lain yang setara.
Mulai sesi lokal:
./pscl -B '1234:[stty -echo raw;echo GO;nc example.com 22;echo FIN]'
Ini akan mengeluarkan perintah stty -echo raw;echo GO;nc example.com 22;echo FIN
ke perangkat jarak jauh jika Anda terhubung secara lokal ke port 1234 dan kemudian meneruskan data apa pun yang dilihatnya bolak-balik dan membatasi lalu lintas sehingga itu tidak akan melebihi kecepatan tty perangkat (115200 adalah default).
Ketika sesi pscl dimulai, sambungkan ke perangkat jarak jauh dengan UART, ssh -e none ...
atau apa pun itu dan setelah Anda memiliki shell jarak jauh, ketik juga secara lokal:
ssh [email protected] -p 1234
untuk memantulkan koneksi SSH dari kotak lokal Anda melalui perangkat jarak jauh ke tujuan example.com
. Tentu saja varian pscr
lebih disukai karena -B
hanya dapat memantulkan satu koneksi pada satu waktu (walaupun Anda dapat meneruskan beberapa perintah -B
untuk berbagai penerusan) dan ada kemungkinan untuk menggantung shell setelah sesi TCP karena pty dalam keadaan raw -echo
-mode raw -echo
dan bergantung pada apakah rekan jarak jauh terakhir juga menutup koneksi, mungkin shellnya hang setelah itu. Jika Anda menemukan pemberitahuan pscl bahwa koneksi telah selesai dan melihat prompt, Anda harus reset
ulangnya, sehingga koneksi baru dapat dimulai. Saat data diteruskan, Anda akan melihat notifikasi ASCII <
dan >
7bit di pscl
yang bersifat lokal untuk memudahkan proses debug dan deteksi kemajuan.
Perhatikan bahwa koneksi ke situs jarak jauh harus 8bit bersih, yaitu ssh, telnet, UART atau saluran apa pun tidak boleh menangani escape sequence (tidak seperti saat menggunakan pscr
). Untuk koneksi ssh ini berarti Anda harus menggunakan ssh -e none
di sesi pscl
.
Selanjutnya, berikut beberapa contoh untuk menangani file biner xfer di mana rfile menunjukkan file jarak jauh dan lfile menunjukkan file lokal.
Untuk memulai sesi untuk menjatuhkan file jarak jauh, secara lokal:
./pscl -B '1234:[stty -echo raw;echo GO;dd of=rfile.bin bs=1 count=7350;echo FIN]'
Di mana Anda perlu menentukan jumlah data yang diharapkan oleh pihak jarak jauh. Ini juga akan berfungsi tanpa (misalnya cat>...
) tetapi kemudian sesi akan terhenti setelah transmisi selesai karena cat
terus-menerus mengharapkan masukan. Dengan menggunakan dd count=...
, Anda akan mendapatkan jalan keluar yang bersih dan diberi tahu melalui penanda FIN.
Kemudian, ssh atau apa pun yang diperlukan untuk mendapatkan shell pada perangkat jarak jauh dari dalam sesi pscl
yang baru saja dimulai. Di terminal kedua secara lokal:
dd if=lfile.bin|nc 127.0.0.1 1234
yang akan terhubung ke port lokal pscl
1234 dan memicu perintah dump di sisi jarak jauh, meneruskan data biner dari lfile.bin
lokal ke remote rfile.bin
. Karena pembatasan tarif, hal ini dapat memakan waktu cukup lama dan Anda hanya mempercayai layar kemajuan psc Anda apakah transfer telah selesai. Perintah lokal dd ...|nc ...
hanya akan menampilkan status lokal yang dapat memakan seluruh file dalam msec karena buffer TCP lokal saat file masih ditransfer melalui pty. Jadi pastikan Anda hanya menekan Ctrl-C
ketika layar pscl memberitahu Anda bahwa itu sudah selesai atau Anda melihat penanda akhir FIN
digaungkan kembali kepada Anda pada sesi dd ...|nc ...
Demikian pula, perintah serupa dapat digunakan untuk mentransfer data biner dari perangkat jarak jauh ke kotak lokal untuk tujuan forensik. Sekali lagi, mulai sesi secara lokal:
./pscl -B '1234:[stty -echo raw;echo GO;dd if=rfile.bin]'
atau
./pscl -B '1234:[stty -echo raw;echo GO;cat rfile.bin]'
Kemudian, ssh ke perangkat jarak jauh untuk mendapatkan shell, lalu secara lokal:
nc 127.0.0.1 1234|dd of=lfile.bin bs=1 count=7350
Untuk mendapatkan rfile.bin
ukuran 7350 disalin ke file lokal lfile.bin
Jika stty -echo raw
tidak tersedia di perangkat, sesuatu seperti python -c "import tty;tty.setraw(0)"
juga berfungsi. Perhatikan bahwa pada perangkat jarak jauh Anda harus memiliki tty (bukan hanya port-shell) saat menggunakan perintah bouncing, karena perintah stty
untuk menyetel mode mentah memerlukan tty yang sebenarnya.
Jika psc berjalan melalui koneksi serial, bit yang hilang dapat mematikan semua kesenangan Anda. Jika Anda menjalankan tanpa HW FC, pada akhirnya Anda akan mengalami bitloss dan koneksi hang, khususnya karena tidak ada pembatasan saat perangkat mengirim data ke arah Anda saat menggunakan perintah pentalan . Membuang data ke perangkat berfungsi lebih baik karena data ini melewati batas kecepatan pscl
.
Namun, berikut beberapa tip yang berhasil bagi saya dalam keadaan ketika pscr
tidak dapat digunakan pada perangkat dan HW FC. Ini hanya berlaku ketika menggunakan UART, karena ini merupakan saluran transportasi yang berpotensi tidak dapat diandalkan.
pscr
pada perangkat sehingga Anda dapat mengatur batasan kecepatan data yang dikirim ke arah Anda. Karena arah menuju perangkat selalu dibatasi kecepatannya, Anda dapat menggunakan perintah pentalan untuk membuang biner pscr
yang dikompilasi silang ke perangkat dan memulai sesi terbatas kecepatan dua arah dengannya.tio -o 1
atau -o 2
untuk menambahkan penundaan antara byte keluaran yang dikirim38400
meskipun saluran serial telah menetapkan 115200
)psc
dengan -DRESPECT_UART_BUFSIZE=4096
, namun ini akan membuat sesi menjadi sangat lambat Di dalam folder contrib
Anda juga akan menemukan patch tio-noprefix
untuk menonaktifkan pemrosesan karakter escape tetapi patch ini hanya diperlukan untuk versi yang lebih lama, karena upstream telah menerima dan mengintegrasikan patch ini. Saya sangat merekomendasikan penggunaan tio
saat menggunakan UART.
Saat menggunakan perintah pentalan di tio , Anda harus menambahkan ke file ~/.tioconfig
Anda:
[default]
prefix-ctrl-key = none
yang menonaktifkan penanganan ESC dan memberi Anda saluran bersih 8-bit.
Anda dapat mengirim SIGUSR1
ke pscl
sehingga ia memberi tahu Anda apakah sesi tersebut dienkripsi. Jika pscr
jarak jauh mati atau keluar tanpa kemungkinan memberi sinyal ke bagian lokal, pscl
akan tetap dalam mode enkripsi dan karenanya hang. Dalam hal ini Anda dapat memaksa reset ke mode teks biasa dengan mengirimkan SIGUSR2
, sehingga sesi baru dapat dimulai.
Pada versi 0.64, psc mendukung soket skrip sehingga Anda tidak lagi memerlukan screen
untuk mendapatkan/meletakkan file atau membuang buffer tempel ke konsol jarak jauh. Sebaliknya, Anda memulai sesi lokal seperti ini:
~ > ./pscl -S ~/psc.script_sock
Anda kemudian dapat melanjutkan dan menggunakannya seperti sebelumnya. Jika Anda perlu 'menempelkan' sesuatu yang Anda lakukan seperti:
~ > ./pscsh -S ~/psc.script_sock -f script_/helloworld
Ini akan 'mengetik' konten script_/helloworld
ke konsol. Saat membuat skrip, stdin pscl
diblokir sehingga input yang dimasukkan tidak tercampur dengan pengetikan apa pun. Jika -S
dihilangkan di pscsh
, ~/psc.script_sock
digunakan secara otomatis. Untuk alasan keamanan, skrip harus dimulai dengan awalan script_
.
Sebagai bonus, pscr
sekarang berisi kemampuan untuk en/decode file base64, bahkan dengan karakter CR yang tertanam untuk kenyamanan. Ini kompatibel dengan uuencode -m
.