Sebuah Pengantar Regular Expressions (Regex)

 Selamat datang kembali, pemula hacker saya!

Subjek yang berikutnya ini mungkin tampak sedikit kabur, tapi saya berjanji, pelajaran ini akan menguntungkan Anda secara signifikan baik sebagai hacker atau sistem admin. Tutorial ini akan mencakup apa yang biasanya disebut sebagai ekspresi reguler, atau regex untuk yang pendek.

Memanipulasi teks di Linux

Ingat, hampir semuanya di Linux adalah file, dan untuk itu, sebagian besar adalah file teks sederhana. Tidak seperti Windows, dengan rumit snap-ins dan MMC untuk mengkonfigurasi aplikasi atau server, Linux hanya memiliki file teks untuk konfigurasi. Mengubah file teks, mengubah konfigurasi. Akibatnya, pelopor awal Linux dikembangkan beberapa cara yang agak rumit dan elegan untuk memanipulasi teks.

Kami telah melihat beberapa cara sederhana untuk memanipulasi teks, seperti grep dan sed, tetapi dengan regex kita akan memiliki kemampuan untuk menemukan pola teks jauh lebih kompleks.

Misalnya, bagaimana jika kita kita sedang mencari baris kode di antara jutaan baris kode yang dimulai dengan "s" yang hanya berisi huruf "sugr" dan angka 1-5 dengan berakhir "bb".

Bisakah kita menemukannya tanpa harus melalui jutaan baris kode? Ya bisa, dengan mengunakan regex!

Pentingnya Belajar Regex

Regex merupakan teknologi informasi yang telah diimplementasikan di seluruh dunia. Pertama kali dikembangkan tahun 1956 dan diadopsi oleh Ken Thompson di Unix asli, sekarang telah ditemukan jalan ke Java, Ruby, PHP, Perl, Python, MySQL, Apache, NET, dan tentu saja, Linux. Tanpa Anda memahami regex, tak hanya sembelit di scripting salah satu bahasa, tapi kemampuan Anda untuk melakukan lebih dari pencarian sederhana ini menggantikan menjadi sangat membosankan. Selain itu, banyak aturan tertulis dalam Snort dengan sistem deteksi intrusi lainnya ditulis dalam regex.

Ini seperti yang dapat Anda bayangkan, jika mencari beberapa kode berbahaya, dan kemampuan untuk mencari dan menemukan pola teks canggih dan kompleks sangat penting.

Bagaimana Regex Bekerja di Lingkungan Keamanan

Berikut langkah-langkah dari ruleset Snort untuk menerangi karya bagaimana regex di lingkungan hacker / keamanan:

Langkah 1: Sebuah Rule Snort

Dari sekian banyak aplikasi dan bahasa scripting yang menggunakan ekspresi reguler, Snort adalah salah satu. Dengan kemampuannya untuk mendeteksi hampir semua jenis serangan, Snort akan lumpuh tanpa kemampuan regex nya. Mari lihat aturan baru yang keluar hanya beberapa minggu yang lalu untuk mendeteksi serangan Ransomware yang terlihat di seluruh dunia.

Aturan Snort untuk Mendeteksi Serangan Ransomware

peringatan tcp $ HOME_NET apapun -> $ EXTERNAL_NET $ HTTP_PORTS (msg: "MALWARE-CNC Win.Ransomware.PRISM koneksi keluar upaya - Dapatkan layar kunci"; aliran: to_server, didirikan; konten: "GET"; http_method; konten: "/ halaman / index_htm_files2 / "; nocase; fast_pattern: saja; PCRE: "/ \ x2f ((xr) _a-z) | [0-9] {3,} \ x2e (css | js | jpg | png | txt) $ / U"; http_uri; metadata: impact_flag merah, kebijakan seimbang-ips drop, kebijakan keamanan-ips drop, masyarakat ruleset, layanan http; referensi: url, http:// www.virustotal.com/en/ file/417cb84f48d20120b92530c489e9c3ee9a9deab53fdd c0dc153f1034d3c52c58/analysis/1377785686/ ; classtype: trojan-kegiatan; sid: 1000033; rev: 3;)

Aturan Akhir

Perhatikan bagian yang berangkat dan dalam huruf tebal. Ini adalah bagian dari aturan yang memanfaatkan PCRE untuk mendeteksi ransomware tersebut.

Kami akan kembali ke aturan ini dalam tutorial nanti, tapi untuk saat ini, mari kita lihat aturan Snort sederhana dengan menggunakan kalimat biasa. Jika Anda tak terbiasa dengan aturan Snort, pastikan untuk memeriksa panduan saya sebelumnya tentang membaca dan menulis aturan Snort .

Sebagai contoh, mari kita gunakan ini sebagai berikut aturan pseudo: peringatan tcp setiap apapun -> setiap 80 (PCRE: "? / \ / foo.php id = [0-9] {1,10} /";)

Bagian pertama aturan harus akrab bagi kita. Mereka mengatakan "mengirim peringatan ketika sebuah paket datang di kawat menggunakan protokol tcp dari alamat IP dari port ke alamat IP ke port 80". Itu yang terjadi setelah header peraturan ini yang baru dan aneh. Tugas kita sekarang, adalah untuk mencari tahu apa aturan ini.

Langkah 2: Beberapa Dasar Sintaks

Sebelum kita mulai mencoba untuk menguraikan apa aturan yang mencari, mari kita lay out sintaks ekspresi reguler dasar sederhana dan aturan. / - Dimulai dan berakhir ekspresi reguler. . - Cocok setiap karakter tunggal. [] - Cocok karakter tunggal dalam kurung. [^] - Cocok segala sesuatu kecuali apa yang ada di-antara kurung (dan setelah ^). [xy] Cocok setiap karakter atau nomor di antara m & n (ex: [iklan] akan cocok dengan huruf a, b, c, atau d dan [2-7] akan cocok dengan nomor 2,3,4,5, 6, dan 7.

Mereka adalah case sensitif secara default, dan dapat dikombinasikan yang Anda suka. misalnya, untuk menyesuaikan karakter alfanumerik, Anda dapat menggunakan [A-Za-z0-9]).

^ - Cocok posisi awal string.

* - Cocok elemen sebelumnya nol atau lebih kali.

$ - Cocok posisi akhir dari string.

() - Mendefinisikan ekspresi atau kelompok.

{n} - Cocok sebelumnya karakter n kali (ex: {5} akan membutuhkan karakter atau kelompok untuk mencocokkan 5 kali).

{m, n} - Cocok elemen sebelumnya setidaknya m kali dan tidak lebih dari n kali (ex: {2,4} akan membutuhkan karakter atau kelompok untuk muncul 2-4 kali berturut- turut).

| - Cocok karakter atau kelompok baik sebelum atau setelah |.

Langkah 3: Menafsirkan Aturan

Merangkum beberapa aturan yang sangat dasar ekspresi reguler. Mari kita coba ekspresi reguler dibangun ke dalam aturan Snort dan mencoba untuk menentukan apa yang di cari.

PCRE: "? / \ / foo.php id = [0-9] {1,10} /";

PCRE: - hanya memberitahu mesin Snort untuk mulai menggunakan Kalimat biasa Perl Kompatibel pada segala sesuatu yang mengikuti.

"- Menunjukkan awal konten.

/ - Menunjukkan awal subexpressions bahwa PCRE mencari.

\ - Ini adalah suatu pelarian karakter-itu mengatakan "tidak menggunakan arti khusus bahwa karakter berikut memiliki di PCRE," melainkan melihatnya karakter sebagai literal.

/foo.php?id= - ini adalah sederhana aturan teks mencari set karakter.

[0-9] - The kurung di sini menunjukkan tampilan untuk salah satu digit antara 0-9.

{1,10} - The kurung kurawal sini mengatakan mencari sebelumnya angka antara 1 dan 10 kali.

/ - End ekspresi kita cari.

Kemudian bisa menafsirkan aturan ini dalam bahasa Inggris mengatakan, "mencari (mungkin URL) yang berakhir dengan" foo.php? Id = "dan kemudian memiliki satu digit antara 0 dan 9 dan bahwa digit dapat diulang antara waktu 1 dan 10."

Aturan ini kemudian akan menangkap paket dengan:

foo.php? id = 1

foo.php? id = 3

foo.php? id = 33

foo.php? id = 333333

Tapi akan melewati paket dengan:

bar.php? id = 1 bar bukannya foo

foo.php? id = harus memiliki minimal satu digit

foo.php? id = A harus memiliki digit bukan abjad

foo.php? id = 11111111111 hanya dapat memiliki antara setelah digit = 1 dan 10

Untuk melengkapi pengantar kami untuk ekspresi reguler, tapi kami akan kembali ke topik ini segera untuk menggali sedikit lebih dalam bahasa yang kuat tapi samar ini, sehingga Anda akan dapat membaca lancar regex seperti yang Anda baca pada halaman ini.

Comments

Popular Posts