- AsmBB adalah mesin forum web cepat dan ringan buatan JohnFound, yang memungkinkan forum dijalankan bahkan di server kecil berkat struktur berbasis bahasa assembly dan SQLite
- Mendukung server Linux x86 dalam mode 32-bit dan 64-bit, serta dapat berjalan di VPS atau shared hosting dengan dukungan FastCGI tanpa library prainstal tambahan
- Keamanannya menekankan minimnya dependensi dan desain internal, lalu berkembang ke database terenkripsi SQLeet di v2.7 dan dukungan SQLite3MultipleCiphers di v3.0
- Fitur diperluas mencakup tema, kustomisasi template, MiniMag·BBCode, lampiran, thread akses terbatas, chat real-time, Atom/RSS, notifikasi SSE, UI multibahasa, embed YouTube, hingga peringkat thread
- v3.0 membawa perubahan yang tidak kompatibel pada struktur database dan template, sehingga saat naik dari v2.9.1 diperlukan dekripsi, backup, perubahan skema, serta penggantian biner dan
templates/
Struktur dan lingkungan eksekusi AsmBB
- AsmBB adalah mesin forum web, dan forum AsmBB.org juga berjalan di atas AsmBB
- Seluruhnya ditulis dalam bahasa assembly dan menggunakan SQLite sebagai backend database
- Menonjolkan kemampuan menangani banyak pengunjung tanpa jeda bahkan di lingkungan hosting yang lemah
- Kebutuhan eksekusinya tergolong rendah
- Memerlukan server Linux x86
- Mendukung 32-bit dan 64-bit
- Tidak memerlukan library prainstal khusus
- Bisa berjalan bahkan di VPS paling kecil atau murah
- Bisa juga di shared hosting jika mendukung FastCGI
- Memerlukan web server yang mendukung antarmuka FastCGI
- Web server yang telah diuji adalah Nginx, Apache, Lighttpd, Hiawatha, RWASA
Keamanan dan database terenkripsi
- AsmBB menargetkan aplikasi web dengan keamanan tinggi berdasarkan desain internal dan sedikit dependensi
- Untuk keamanan lebih tinggi, ada dukungan opsional untuk database terenkripsi
- Perubahan utama di v2.7 adalah dukungan untuk database forum terenkripsi
- Menggunakan plugin SQLite SQLeet
- Menurut spesifikasi, mendukung derivasi kunci PBKDF2-HMAC-SHA256, salt 16-byte, dan 12345 iterasi
- Menggunakan stream cipher ChaCha20 dan kunci sekali pakai
- Menggunakan tag autentikasi Poly1305
- Enkripsi dapat dinyalakan atau dimatikan dari tab Encryption baru di panel pengaturan admin
- Kunci enkripsi tidak disimpan di disk dan hanya disimpan sementara di RAM
- Ditujukan agar database forum, atribut akun, dan data pribadi tidak terekspos bahkan jika web server, backup server, atau media backup mengalami kompromi serius
- Batasan yang diketahui adalah setiap kali mesin di-restart, kunci enkripsi harus dimasukkan ulang melalui antarmuka web
- Jika server restart secara tidak sengaja, akses ke forum bisa terblokir sementara
- AsmBB menjelaskan bahwa karena ini aplikasi yang stabil dan berjalan lama, situasi seperti itu biasanya hanya terjadi sekali dalam beberapa bulan atau tahun
- Saat menggunakan database terenkripsi, penggunaan SSL/TLS wajib
Kustomisasi dan jalur instalasi
- AsmBB memungkinkan forum dikustomisasi melalui sistem template tanpa harus memodifikasi kode secara langsung
- Paket biner bisa diunduh dari asmbb.tar.gz, dan tautan tersebut menunjuk ke paket biner terbaru
- Memeriksa progres, melaporkan bug, dan mengkloning source dapat dilakukan di AsmBB source repository
- Dokumentasi instalasi di server sendiri disediakan melalui tutorial instalasi NGINX dan systemd
- Dengan RWASA, instalasi bisa dilakukan dalam waktu kurang dari 2 menit, dan tersedia video tutorial serta video YouTube
Perubahan forum terbaru
- Forum saat ini menambahkan tema Glass, Neumor, Poly, Brutal, Joly, Tailwind, Snes
- Penyisipan URL pada tombol MiniMag menggunakan teks yang dipilih sebagai anchor text
- Verifikasi email dikirim sesuai pengaturan bahasa default
- Ada perbaikan terkait MiniMag
- Fitur page untuk kontak atau TOS dan sebagainya telah diimplementasikan
- API telah diimplementasikan
Perubahan utama v3.0 dan hal yang perlu diperhatikan saat upgrade
- v3.0 menambahkan beberapa fitur baru
- Gambar bisa langsung ditempel lalu ditambahkan sebagai lampiran
- Mendukung embed video YouTube
- Memperkenalkan editor post/thread terpadu yang menyederhanakan kode dan template
- Menambahkan peringkat thread
- Skin Modern dihapus dari proyek karena dianggap berkualitas rendah
- v3.0 mencakup perubahan yang tidak kompatibel dengan versi sebelumnya
- Perubahan struktur database
- Perubahan struktur template
- Karena proyek SQLeet dihentikan, ditambahkan dukungan untuk ekstensi enkripsi SQLite3MultipleCiphers
- Paket rilis biner dikompilasi bersama ekstensi ini
- Bug dan kerentanan yang ditemukan telah diperbaiki
- Beberapa bug ditemukan sebagai hasil dari hxp CTF event
- Saat memperbarui database dari v2.9.1 ke v3.0, urutannya penting
- Database yang ada harus didekripsi sebelum dimodifikasi
- Library SQLite3MultipleCiphers baru digunakan dalam mode yang tidak kompatibel dengan library SQLeet lama
- Sebelum migrasi ke v3.0, database bisa didekripsi dulu lalu dienkripsi kembali dengan library baru sesudahnya
- Perlu backup untuk berjaga-jaga jika terjadi masalah
- Perlu menjalankan SQL perubahan skema yang disediakan di konsol SQLite
- Setelah skema database diubah, mesin harus dihentikan lalu file biner
engine,ld-musl-i386.so,libsqlite3.soharus diganti - Saat mesin dihentikan, seluruh direktori
templates/juga harus diganti dengan yang baru - Setelah mesin dijalankan kembali, perlu dipastikan forum yang telah diperbarui tidak bermasalah
- Jika semuanya tampak normal, database bisa dienkripsi kembali dari halaman pengaturan AsmBB
Alur rilis v2.x
-
v2.9: Urban Sunrise dan peningkatan pengalaman edit
- Tema responsif baru Urban Sunrise ditambahkan
- Ditujukan untuk memperbaiki tampilan forum
- Bantuan format dibangun langsung ke editor post
- Unicode Emoji didukung secara native di editor post dan chat real-time
- Mendukung syntax highlighting source code melalui library JS
- Chat real-time dapat menerima post multi-baris termasuk source code
- Bug yang dilaporkan pada mesin AsmBB dan library FreshLib telah diperbaiki
-
v2.8: Perbaikan bug dan fitur pertahanan
- Berbagai bug telah diperbaiki, beberapa di antaranya bug kritis
- Tema baru Modern ditambahkan
- Perlindungan DDOS diimplementasikan untuk kasus langka ketika AsmBB tidak mampu mengikuti kecepatan permintaan
- Analyzer URL untuk parser MiniMag dan BBCode ditambahkan untuk mencegah serangan XSS melalui tautan pengguna
-
v2.6: UI Jerman dan perluasan SSE
- Ini adalah versi resmi pertama yang mencakup terjemahan UI bahasa Jerman
- Terjemahan lain juga ditingkatkan dengan bantuan komunitas
- Seluruh forum, tag tertentu, dan tema tertentu dapat dilanggan lewat feed Atom/RSS
- Penanganan server-sent events (SSE) ditulis ulang dari awal
- SSE menjadi dapat digunakan bukan hanya untuk chat real-time, tetapi juga notifikasi berbagai event forum seperti post baru dan aktivitas pengguna
- Semua klien ditangani dalam satu thread sehingga banyak pengunjung bisa dilayani sekaligus dengan beban server rendah
- Versi terbaru library SQLite dan MUSL disertakan dalam paket biner
-
v2.5: UI multibahasa dan BBCode
- Internasionalisasi antarmuka pengguna diperkenalkan
- Pengguna dapat memilih bahasa UI forum
- Bahasa yang tersedia adalah English, Bulgarian, Russian, French
- Parser BBCode ditambahkan sebagai bahasa markup kedua, sehingga memahami MiniMag maupun BBCode
- BBCode berguna saat membuat skrip migrasi dari mesin forum lain
- Email dapat dikirim melalui program eksternal seperti
sendmail
-
v2.4: Lampiran, akses terbatas, performa chat
- File dapat dilampirkan ke post dan izin lampiran dikelola per pengguna
- Limited access threads memungkinkan pemilik thread menentukan daftar pengguna yang boleh mengakses
- Hak pengguna dapat diedit di halaman admin
- Hak pengguna anonim dapat diatur terpisah, sehingga forum tertutup yang hanya bisa dibaca pengguna terdaftar dapat dibuat
- Layanan chat real-time direfaktor agar semua koneksi ditangani dalam satu thread
- Setelah optimasi mesin rendering template, skema database, dan permintaan SQL, kinerjanya sekitar 20% lebih cepat daripada versi sebelumnya
-
v2.3: Pemeliharaan dan aksesibilitas
- Ini adalah rilis pemeliharaan yang memperbaiki 2 bug serius
- Untuk aksesibilitas, gambar latar diganti dengan tag
<img>yang memiliki teksalt - Forum tetap bisa digunakan meski gambar dimatikan
- Kode JS untuk chat dirapikan dan sedikit lebih cepat
-
v2.2 dan v2.1: Login, pemulihan, navigasi
- Mencakup login persisten, reset kata sandi, daftar pengguna, dan peningkatan chat
- Login persisten dinonaktifkan secara default
- Reset kata sandi memerlukan email yang valid dan dapat diakses dari tautan pada form login
- v2.2 menambahkan navigasi Categories berbasis sistem tag
- Ditambahkan fitur penyimpanan riwayat edit/hapus post dan pemulihan
-
v2.0: Performa dan keamanan kode
- Renderer template
render.asmdigantikan denganrender2.asm - Implementasi baru menggunakan algoritme yang lebih bergaya assembly sehingga lebih cepat dan menggunakan lebih sedikit memori
- Perbandingan string berantai pada parsing URL diganti dengan hash table
- Kecepatan AsmBB menjadi sekitar dua kali lipat
- Kerentanan yang ditemukan oleh alat pengujian termasuk OWASP ZAP dan Tinfoil security telah diperbaiki
- Kebocoran resource dan memori yang ditemukan selama fuzzing berat dan uji beban semi-DDOS telah diperbaiki
- Diimplementasikan alat debugging yang mengumpulkan alokasi dan dealokasi resource serta memori lalu melaporkannya ke halaman web
- Renderer template
1 komentar
Opini Hacker News
Ini memang sangat keren, tetapi kalimat berikut sangat meragukan:
“Berkat desain internal dan dependensi yang lebih sedikit, AsmBB adalah aplikasi web yang sangat aman.”
Ada nilai besar juga dalam memakai dependensi yang sudah teruji baik, dan bahkan Chuck Norris pun pasti akan membuat bug kalau menulis perangkat lunak kompleks dalam assembly.
Apalagi jika harus banyak melakukan pemrosesan string seperti proyek ini.
Dulu ketika proyek ini muncul sebagai tantangan CTF yang hanya meng-host versi terbaru proyek ini apa adanya, saya juga merasakan hal yang sama, dan selama kompetisi ditemukan setidaknya 8 kerentanan.
https://ctftime.org/task/24399
Misalnya, akan lebih baik jika ditulis kira-kira “AsmBB menekankan keamanan dalam desainnya dan lebih sedikit bergantung pada dependensi.”
Saya menyukainya, dan luar biasa juga mereka tetap maju dengan bahasa assembly. Mengurangi dependensi memang mengurangi permukaan serangan, tetapi itu saja tidak cukup untuk menyebutnya “aman”.
Secara probabilistik, itu menurunkan kemungkinan eksploitasi, tetapi bahasa assembly sama sekali tidak memberi keamanan memori atau jaminan lain, sehingga juga bisa meningkatkan risiko.
Saya tidak bisa memastikan mana yang lebih besar, tetapi aplikasi berbasis assembly tetap menarik. Sebagai bonus, kalau ditranspilasi ke aarch64, mungkin Pi-Zero atau Pi-W bisa dicolokkan ke adaptor dinding dan menjalankannya.
Di sisi lain, saya juga sesekali meneliti forum terdistribusi. Setelah Usenet tersisih, forum seperti ini menjadi arus utama, tetapi kalau ingin ada pengganti, menurut saya ia harus membawa kemampuan distribusi/replikasi Usenet sekaligus pengalaman pengguna seperti phpBB.
Membuatnya terdistribusi dan memiliki konsistensi eventual adalah tugas sistem terdistribusi yang bagus, jadi bisa dinikmati seperti teka-teki. Kalau ada yang pernah membuat sesuatu yang mirip, saya sangat ingin melihatnya.
Overflow dan underflow aritmetika bertanda bekerja sesuai perkiraan, dan memori yang dialokasikan dengan
mmap + MAP_ANONYMOUSdiinisialisasi ke 0 sesuai perkiraan.Mengakses ruang alamat yang tidak dipetakan, termasuk alamat 0, akan menghasilkan
SIGSEGVsesuai perkiraan.Assembler membuat jauh lebih sedikit asumsi dan tidak secerdas compiler C, sehingga lebih mungkin langsung meledak saat terjadi kesalahan daripada diam-diam melanggar ekspektasi.
Berdasarkan footer, waktu pemrosesan-nya sangat cepat sampai tidak masuk akal. Namun dokumennya butuh 500–1000 ms untuk dikirim sampai Denmark.
Dalam kasus ini, CDN tampaknya lebih baik daripada kode yang sangat cepat, tetapi tetap saja ini karya yang mengesankan.
Tentu waktu transmisi mungkin mengambil porsi besar, tetapi kalau itu dianggap “bagus”, rasanya agak berat.
Saya penasaran bagaimana kode assembly terhubung ke database. Apakah ada semacam library assembly?
Secara teori saya paham, tetapi usaha untuk menulis sendiri hal-hal “sederhana” seperti itu tampaknya akan sangat besar.
Kode terkait ada di sini: https://asm32.info/fossil/asmbb/file?name=source/sqlite3.asm...
Memprogram dalam assembly pada dasarnya berarti melakukan sendiri pekerjaan yang biasanya dilakukan compiler, dan Anda bisa memanggil fungsi-fungsi library yang sama seperti yang bisa dipanggil kode C.
Hanya saja Anda harus mengikuti konvensi pemanggilan arsitektur tersebut, jadi merepotkan dan membosankan, tetapi bukan sesuatu yang nyaris mustahil.
x64 menjadi lebih merepotkan untuk pemanggilan fungsi karena memakai register terlebih dahulu lalu meneruskan ke stack setelah habis. x32 jauh lebih nyaman karena hanya memakai stack, tetapi konvensi x64 bisa menghasilkan kode yang lebih cepat dengan mempertahankan nilai di register.
Ini bukan hanya ditulis dalam assembly; di belakangnya ada SQLite. Seperti banyak aplikasi lain, bottleneck kemungkinan lebih pada I/O daripada CPU.
Tentu kalau mengingat kode PHP yang pernah saya lihat, saya paham mengapa orang merasa begitu. Tetapi itu lebih soal cara penggunaannya daripada bahasa itu sendiri.
Masalahnya adalah portabilitas. Saya suka AVR-8, tetapi ketika kebutuhan membesar, AVR-8 tidak punya banyak tempat untuk berkembang selain mungkin soft core FPGA.
Dengan C, kita bisa memindahkannya ke mikrokontroler ARM, dan meski secara pribadi kurang menyenangkan, performanya lebih baik.
Masalah AsmBB juga adalah ia terikat pada arsitektur tertentu.
PRAGMA synchronousdisetel keNORMAL? Saya sama sekali bukan ahli SQLite, dan sedang mempelajarinya untuk dipakai dalam proyek.Tertulis bahwa “selain itu, ia mendukung karakter Unicode Emoji dengan cara yang benar-benar native”, tetapi sebaiknya dijelaskan lebih rinci di sini
Saya tidak begitu paham apa maksud “benar-benar native”, dan juga tidak jelas apa bedanya dengan cara yang “agak native”
Namun chat real-time melakukan penyorotan emoji di kode JS yang merupakan bagian dari template:
function formatEmoji(text) {var emojiRegEx = /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/g;return text.replace(emojiRegEx, '$1');}Mungkin maksudnya menangkap U+00A9, U+00AE, U+2000..3300, U+1F000..1FBFF, tetapi itu sendiri terlalu luas dan regex-nya juga bukan konversi yang setia
Jika penasaran dengan solusi yang benar, bisa memakai
emoji-regex[1] atau pola yang lebih baru/\p{RGI_Emoji}/v[2][1] https://unpkg.com/browse/emoji-regex/index.js
[2] https://caniuse.com/mdn-javascript_builtins_regexp_unicodese...
Di header ada tombol untuk mematikan notifikasi real-time
Selain itu, menampilkan daftar pengguna forum kepada orang yang belum login rasanya kurang bagus. Apakah ini bisa dikonfigurasi?
Konsep dan implementasinya benar-benar bagus. Namun notifikasi real-time cepat menjadi terlalu banyak, jadi sepertinya perlu ada pembatasan laju dalam bentuk apa pun
@User123 has entered the threadmungkin cocok untuk forum kecil tempat semua orang saling mengenalphpBB/vBulletin menampilkan daftar “pengguna yang membaca thread ini: ...” juga karena alasan itu, dan ada juga plugin populer yang menampilkan bahwa
@Foodan@Barsedang menulis balasan di thread iniTerutama saat diskusi panas, itu membuat ruang terasa lebih hidup, dan mengetahui bahwa lawan bicara sedang menulis posting panjang berikutnya untuk membantah tulisan saya per kutipan juga terasa lumayan bagus
Namun menerima notifikasi setiap kali tamu yang tidak terdaftar mengklik thread tampaknya tidak berguna bagi siapa pun
Hal serupa juga bisa dibuat dengan C dan tetap meninggalkan standard library. Bisa dibuat tanpa dependensi selain system call
Selain sebagai latihan intelektual, saya tidak begitu melihat alasan kuat mengapa harus memakai assembly
Judulnya tidak menyebut assembly yang mana, bahkan sistem operasi apa yang menjalankannya pun tidak ada
Menggabungkan “x86 asm” dan “on linux” pun tidak lebih panjang daripada “assembly language”