Skip to main content

Log Management Dengan Graylog2, MongoDB, Elasticsearch, Kibana (2)

Bagian 2 dari 3 tulisan
Pada bagian ini diuraikan konfigurasi input dan ekstraktor serta menghubungkan Suricata ke Graylog2

Melanjutkan tulisan sebelumnya Log Management Dengan Graylog2, MongoDB, Elasticsearch, Kibana (1), pada tulisan ini akna sedikit menguraikan tentang beberapa konfigurasi dan pemanfaatannya.  Tentunya masih menggunakan Graylog2.

Input.

Konfiguras Input sangat penting mengingat ini adalah item konfigurasi yang memungkinkan Graylog2 untuk membuka port menangkap kiriman log. Ada beberapa jenis input.  Namun untuk sementara kita hanya menggunakan “Syslog TCP”  dan “Syslog UDP”.  Dan karena input nanti akan berhubungan dengan extractors, maka sebaiknya input dibuat spesifik untuk mesin log yang spesifik juga.  Misalkan kita akan menangkap log dari Suricata, kita buatkan 1 input khusus dengan protocol UDP misalnya, dan listening pada port 6160 misalkan.

Langkah pembuatan input

Untuk membuat input, setelah kita bisa memasuki interface Graylog2, silakan klik pada "System--Input" sebagaimana terlihat pada gambar:

System-->Input
Setelah kita klik input, maka kita akan dibawa ke layar berikut:

Layar Konfigurasi Input.
Dan, perhatikan gambar berikut:




Langkah-langkah:
  1. Pilih Syslog-UDP dan klik "Launch new Input" sehingga muncul pop-up.  Perhatikan judul pop-up harus sesuai dengan yang kita pilih.
  2. Tentukan nama Input
  3. Tentukan pada port berapa input akan dipasang (contoh 6061)
  4. Tentukan bind address (pada contoh 0.0.0.0 alias semua IP yang aktif)
  5. Klik "Launch"
Setelah kita klik Launch, maka input object aru akan di list pada layar Input dalam kondisi belum aktif. Untuk mengaktifkannya kita bisa klik "Start Input".


Namun, sebelum kita buatkan ekstraktorynya, ada baiknya jangan kita start dulu inputnya, karena ekstraktor berjalan saat ada log stream diterima oleh input.  Jadi bila input tidak dilengkapi oleh ektraktor, maka log stream yang disimpan adalah log stream apa adanya.

Manage Extractors

Untuk memanage ekstraktor, pada boks input kita klik tomnbol "Manage Extractors" sehingga kita akan dibawa ke layar berikut:
Layar Manage Extractors
Pada gambar, kita lihat belum ada satupun ektraktor yang bisa digunakan.  Untuk menambahkan, klik "Action" dan pilih "Impor Extractors". Dan masukkan text berikut (modifikasi ekstraktor untuk menghandle Log Suricata, sesuai kebutuhan saya).
#----------------------------------------------------------

{
  "extractors": [
    {
      "condition_type": "none",
      "condition_value": "event_type",
      "converters": [],
      "cursor_strategy": "copy",
      "extractor_config": {
        "regex_value": "\"event_type\"[:]([^,]+)"
      },
      "extractor_type": "regex",
      "order": 1,
      "source_field": "message",
      "target_field": "event_type",
      "title": "suricata Event Type"
    },
    {
      "condition_type": "none",
      "condition_value": "src_ip",
      "converters": [],
      "cursor_strategy": "copy",
      "extractor_config": {
        "regex_value": "\"src_ip\"[:]([^,]+)"
      },
      "extractor_type": "regex",
      "order": 1,
      "source_field": "message",
      "target_field": "src_ip",
      "title": "Source IP"
    },
    {
      "condition_type": "none",
      "condition_value": "src_port",
      "converters": [],
      "cursor_strategy": "copy",
      "extractor_config": {
        "regex_value": "\"src_port\"[:]([^,]+)"
      },
      "extractor_type": "regex",
      "order": 1,
      "source_field": "message",
      "target_field": "src_port",
      "title": "Soource Port"
    },
    {
      "condition_type": "none",
      "condition_value": "dest_ip",
      "converters": [],
      "cursor_strategy": "copy",
      "extractor_config": {
        "regex_value": "\"dest_ip\"[:]([^,]+)"
      },
      "extractor_type": "regex",
      "order": 1,
      "source_field": "message",
      "target_field": "dest_ip",
      "title": "Destination IP"
    },
    {
      "condition_type": "none",
      "condition_value": "dest_port",
      "converters": [],
      "cursor_strategy": "copy",
      "extractor_config": {
        "regex_value": "\"dest_port\"[:]([^,]+)"
      },
      "extractor_type": "regex",
      "order": 1,
      "source_field": "message",
      "target_field": "dest_port",
      "title": "Destination Port"
    },
    {
      "condition_type": "none",
      "condition_value": "hostname",
      "converters": [],
      "cursor_strategy": "copy",
      "extractor_config": {
        "regex_value": "\"hostname\"[:]([^,]+)"
      },
      "extractor_type": "regex",
      "order": 1,
      "source_field": "message",
      "target_field": "hostname",
      "title": "Destination Host name"
    },
    {
      "condition_type": "none",
      "condition_value": "url",
      "converters": [],
      "cursor_strategy": "copy",
      "extractor_config": {
        "regex_value": "\"url\"[:]([^,]+)"
      },
      "extractor_type": "regex",
      "order": 1,
      "source_field": "message",
      "target_field": "url",
      "title": "URL"
    },
    {
      "condition_type": "none",
      "condition_value": "http_user_agent",
      "converters": [],
      "cursor_strategy": "copy",
      "extractor_config": {
        "regex_value": "\"http_user_agent\"[:]([^,]+)"
      },
      "extractor_type": "regex",
      "order": 1,
      "source_field": "message",
      "target_field": "http_user_agent",
      "title": "HTTP User Agent"
    },
    {
      "condition_type": "none",
      "condition_value": "http_content_type",
      "converters": [],
      "cursor_strategy": "copy",
      "extractor_config": {
        "regex_value": "\"http_content_type\"[:]([^,]+)"
      },
      "extractor_type": "regex",
      "order": 1,
      "source_field": "message",
      "target_field": "http_content_type",
      "title": "HTTP Content Type"
    },
    {
      "condition_type": "none",
      "condition_value": "http_method",
      "converters": [],
      "cursor_strategy": "copy",
      "extractor_config": {
        "regex_value": "\"http_method\"[:]([^,]+)"
      },
      "extractor_type": "regex",
      "order": 1,
      "source_field": "message",
      "target_field": "http_method",
      "title": "HTTP Method"
    },
    {
      "condition_type": "none",
      "condition_value": "signature",
      "converters": [],
      "cursor_strategy": "copy",
      "extractor_config": {
        "regex_value": "\"signature\"[:]([^,]+)"
      },
      "extractor_type": "regex",
      "order": 1,
      "source_field": "message",
      "target_field": "signature",
      "title": "Signature"
    },
    {
      "condition_type": "none",
      "condition_value": "payload",
      "converters": [],
      "cursor_strategy": "copy",
      "extractor_config": {
        "regex_value": "\"payload\"[:]([^,]+)"
      },
      "extractor_type": "regex",
      "order": 1,
      "source_field": "message",
      "target_field": "payload",
      "title": "Payload"
    },
    {
      "condition_type": "none",
      "condition_value": "payload_printable",
      "converters": [],
      "cursor_strategy": "copy",
      "extractor_config": {
        "regex_value": "\"payload_printable\"[:]([^,]+)"
      },
      "extractor_type": "regex",
      "order": 1,
      "source_field": "message",
      "target_field": "payload_printable",
      "title": "Payload Printable"
    },
    {
      "condition_type": "none",
      "condition_value": "severity",
      "converters": [
        {
          "config": {},
          "type": "numeric"
        }
      ],
      "cursor_strategy": "copy",
      "extractor_config": {
        "regex_value": "\\\"severity\\\"[:]([^\\}|\\]]+)"
      },
      "extractor_type": "regex",
      "order": 1,
      "source_field": "message",
      "target_field": "severity",
      "title": "Severity"
    },
    {
      "condition_type": "none",
      "condition_value": "signature_id",
      "converters": [],
      "cursor_strategy": "copy",
      "extractor_config": {
        "regex_value": "\"signature_id\"[:]([^,]+)"
      },
      "extractor_type": "regex",
      "order": 1,
      "source_field": "message",
      "target_field": "signature_id",
      "title": "Signature ID"
    },
    {
      "condition_type": "none",
      "condition_value": "bytes_toclient",
      "converters": [
        {
          "config": {},
          "type": "numeric"
        }
      ],
      "cursor_strategy": "copy",
      "extractor_config": {
        "regex_value": "\\\"bytes_toclient\\\"[:]([^\\,]+)"
      },
      "extractor_type": "regex",
      "order": 1,
      "source_field": "message",
      "target_field": "bytes_toclient",
      "title": "Bytes to Client"
    },
    {
      "condition_type": "none",
      "condition_value": "bytes_toserver",
      "converters": [
        {
          "config": {},
          "type": "numeric"
        }
      ],
      "cursor_strategy": "copy",
      "extractor_config": {
        "regex_value": "\"bytes_toserver\"[:]([^\\,]+)"
      },
      "extractor_type": "regex",
      "order": 1,
      "source_field": "message",
      "target_field": "bytes_toserver",
      "title": "Bytes to Server"
    }
  ],
  "version": "1.1.6 (2e264c2)"
}
#----------------------------------------------------------

Copy text di atas, dan paste ke layar berikut:


Setelah selesai, klik "Add extractors to input" dan kita akan dibawa ke layar berikut:

Daftar Ekstrator yang terbentuk
Penyesuaian Konfigurasi Syslog mesin Suricata

Pada tulisan Install Suricata IDS Pada Ubuntu 14.04, telah diuraikan tentang konfigurasi Suricata agar menuliskan outputnya ke syslog.  Di sini kita akan merubah konfigurasi syslog agar log dari suricata bisa di'lempar' ke Graylog2 pada protokol UDP dengna port 6061.

Pada Ubuntu 14.04, kita merubah konfigura syslog pada /etc/rsyslog.d/50-default.conf, sedangkan pada Centos 7.0 kita sesuaikan file /etc/rsyslog.conf dengan menambahkan baris berikut pada baris terakhir.

suricata                                 @graylog2-host:6061
Catatan: @@ menunjukkan penggunaan protokol TCP, @ menunjukkan penggunaan protokol UDP
Kemudian restart service rsyslog dengan perintah.


[root@suricatahost~]#service rsyslog restart


Setelah syslognya aktif, kita jalankan input pada graylog.  Tunggu beberapa saat sampai cukup log item untuk ditampilkan.

Setelah kira-kira akumulasi event dirasa cukup, maka kita bisa coba dengan klik "Seacrh" dan memasukkan "source:[suricatahost]" (dengan kurung siku menandakan variable, misal suricatahost = surids, maka
querynya adalah "source:surids").  Setelah menuliskan query dengan benar, tekan enter.

Layar "Search" untuk meng-query event.
Kita bisa melakukan analisa instan melalui box fields. Dalam contoh berikut kita ingin detil signature dengan mengklik "Quick View" di bawah signature.

Interaktif screen pada menu "Search"

Ok, sekarang suricata sudah ngobrol dengan Graylog2. Silakan dieksplore lebih lanjut, termasuk pembentukan Dashboard.  Dan, karena data tersimpan dalam elasticsearch, maka syntax untuk searching atau filtering data harus mengikuti kaidah yang berlaku pada elasticsearch.

Popular posts from this blog

Superfish Menginjeksi Laman-Laman Google

Beberapa bulan lalu pengguna lenovo sempat dibuat gerah dengan penggunaan software superfish yang sengaja disisipkan oleh Lenovo. Penggunaan adware yang sebenarnya dimaksudkan untuk memudahkan pengguna yang suka berbelanja ternyata justeru menjadi duri dalam daging bagi pengguna. Adware ini, mampu membongkar enkripsi web pengguna komputer dan akhirnya membuat komputer yang bersangkutan menjadi rentan terhadap serangan cyber. Dan yang paling ‘menggemaskan’ adalah adware ini bisa menyuntikkan iklan-iklan yang tidak diinginkan (bahkan sering menampilkan gambar perempuan dengan pakaian minim) ketika pengguna membuka web apapun. Meskipun Lenovo telah berjanji untuk menghentikan penggunaan Superfish, namun ternyata bahaya masih mengintai para pengguna internet. Google sebagai peramban paling populer saat ini berpotensi menyebarkan Ad Injection melalui ekstensyen nya. Berdasar riset dari Google, 4% laman google telah di-inject oleh superfish dengan iklan-iklan yang gak jelas. Dan 5....

Masih Pagi??

Ingat saat di sekolah S3 (SD,SMP,SMA) segala sesuatu yang menyangkut hasrat dan keinginan ada kalanya mentog kepada satu frasa: masih pagi. Berpikir tentang rezeki katanya masih terlalu pagi untuk memikirkan hal yang gak-gak gitu. Mengangankan tentang hari nanti (mungkin adalah saat ini), juga dibilang masih terlalu pagi apalagi jika sifatnya pesimistis. Terima kasih untuk semua yang mengatakan itu karena setidaknya aku bisa berfikir saat ini, bahwa memang masih terlalu pagi (saat itu), tetapi terlalu pagi itu bukan artinya untuk berhenti memulai. Tetapi terlalu pagi yang berarti bahwa memang sudah seharusnya dimulai saat itu. Kita tidak pernah tahu apa yang akan kita dapatkan nanti, dan karena itu kita harus tahu apa yang harus kita kerjakan saat ini. Merencanakan adalah kata yang sangat indah untuk diucapkan. Perencanaan adalah sesuatu yang sangat mudah untuk dituliskan manakala pelaksanaan tidak pernah terpikirkan. Semua bermuara pada satu kata : tangggung jawab . Tanggung jawab...

Snort dan Suricata IDPS

Sugeng pagi, Mas! Pagi, gimana kabarnya? Baik, Mas. Gini, Mas! Saya lagi pusing ngurusin jaringan di kantor. Pusing kenapa? Itu lo, Mas, virus tau-tau nongol tanpa permisi.  Bikin jaringan jadi lemot. Yang lebih repotnnya lagi, kita gak tau dari sebelah mana penyebarannya. Lah, gitu aja kok pusing.  Kamu punya alat monitoring macem IDS gak? Apa itu IDS, Mas? IDS itu, singkatan coro londo Intrussion Detection System.  Maksudnya sistem buat mendeteksi aktifitas penyusupan. La, itu kan bukan antivirus, Mas! Lagian mana ada sih yang nyusup di kantor saya.  Apalagi kantor banyakan mainnya di jaringan private. La ini, yang salah! Jangan beranggapan bahwa setiap penyusupan itu datangnya dari luar. Ancaman kebocoran itu paling besar justeru datangnya dari dalam. Dan satu hal lagi penyusupan tidak harus terjadi dalam satu saat.  Seperti proses penyusupan yang dilakukan dengan menggunakan kuda trojan.  Para penyusup justeru anteng dulu di dalam kuda trojan....