Algoritma dan Struktur Data

Kali ini kita akan bahas tentang hubungan algoritma dan struktur data. Pada saat algoritma dijalankan, maka data (input/output) akan disimpan dalam suatu tempat (struktur data) untuk kemudian diproses. Kita sudah mengenal beberapa struktur data seperti struktur data linear misalnya linked list, queue (antrian), stack (tumpukan), dan struktur data non-linear misalnya tree yang bersifat hirarki. Struktur data adalah cara merepresentasikan atau menyimpan data dalam memori komputer. Data ini harus direpresentasikan sedemikian rupa sehingga mudah diproses. Di sinilah peran struktur data dan alasan kenapa penting untuk memahami topik ini.

Sebagai bahan penyegaran, kita akan mereview beberapa jenis struktur data yang umum digunakan

  • Linked List
    Linked list merupakan sebuah struktur data list yang saling terhubung melalui suatu link. Dalam sebuah linked list terdapat node dan link. Node pertama disebut head. Ada beberapa tipe linked list misalnya single linked list, double linked list, dan circular linked list. Suatu node pada linked list terdiri dari data item dan pointer ke node lainnya. Single linked list hanya memiliki 1 pointer yang mengarah ke node selanjutnya sehingga hanya bisa melakukan proses penelusuran ke depan (forward). Double linked list terdiri dari data item dan dua pointer yang menunjuk ke node sebelum dan sesudahnya. Jadi double linked link bisa melakukan proses penelusuran ke depan (forward) dan belakang (backward). Circular linked list mirip dengan single linked list, namun pointer node terakhir menunjuk ke alamat head.

    Single Linked List
    single linked list
    Double Linked List
    Double Linked List
    Circular Linked List
    Circular Linked List

    Pada linked list dapat dilakukan operasi seperti insert menambahkan node baru baik di depan (head), di tengah, ataupun di belakang (tail). Operasi remove menghapus salah satu node. Update untuk memperbaharui nilai suatu node. Retrieve untuk mendapatkan informasi tentang isi dari suatu node tertentu.

  • Array
    Array merupakan salah satu tipe list yang memiliki suatu key atau yang lebih dikenal dengan index untuk menandai setiap elemen array tersebut. Pada beberapa bahasa pemrograman ukuran suatu array harus dideklarasikan terlebih dahulu sehingga memiliki lokasi yang fix dalam memori. Array biasanya diberi nama untuk membedakannya dengan array yang lain. Salah satu karakteristik array adalah bahwa semua elemen yang tersimpan di dalamnya memiliki tipe data yang sama. Jadi, data float tidak bisa ditampung dalam sebuah array yang memiliki tipe data integer. Array diakses dengan menggunakan indexnya. Index adalah suatu nilai yang menunjukkan urutan elemen dalam array, adapun elemen adalah data yang tersimpan dalam index tertentu. Misalkan Integer Array A[10]=12 maka bisa diartikan sebuah array A bertipe integer pada inde

    Array
    Array
  • Queue
    Queue juga merupakan salah satu jenis list namun memiliki sifat yang khas. Queue biasa dalam bahasa Indonesia disebut sebagai antrian. Queue bisa diimplementasikan dengan array ataupun linkedl list. Pada queue operasi penambahan (insertion) hanya bisa dilakukan di bagian belakang queue. Adapun penghapusan (deletion) hanya bisa dilakukan di bagian depan queue. Oleh karena itu, queue menerapkan prinsip First In First Out (FIFO). Salah satu variasi dari queue adalah Priority Queue. Pada Priority Queue setiap elemen queue memiliki suatu nilai (key) yang menunjukkan tingkat prioritasnya. Biasanya nilai yang lebih kecil menunjukkan prioritas lebih besar. Adanya nilai ini menyebabkan prinsip FIFO bisa diabaikan. Suatu elemen yang datang belakangan bisa dieksekusi terlebih dahulu karena memiliki prioritas lebih tinggi dari elemen yang sudah ada sebelumnya. Oleh karena itu, priority queue memiliki operasi tambahan yaitu mampu menentukan elemen dengan prioritas terbesar MAX (A), menaikkan prioritas suatu elemen ke nilai tertentu INCREASE-KEY (A, key, k), menentukan elemen terbesar dan menghapusnya/ekstrak REMOVE-MAX(A).

    Queue
    Queue
  • Stack
    Stack juga termasuk salah satu jenis list. Dalam bahasa indonesia stack biasa disebut juga sebagai tumpukan. Sama seperti queue, stack juga memiliki sifat atau operasi tertentu yang membedakannya dari list secara umum. Ukuran stack dapat ditentukan pada saat deklarasi. Jadi stack tersebut hanya mampu menampung sekian elemen sesuai dengan yang dideklarasikan di awal. Hal ini menyebabkan adanya operasi pada stack untuk mengetahui kondisi stack apakah kosong  (isEmpty) atau penuh (isFull). Selain itu, ada dua operasi pada stack yaitu menambahkan tumpukan (Push) atau mengambil tumpukan (Pop). Perintah Push akan menambah jumlah elemen dalam tumpukan dan harus didahului dengan perintah isFull. Hal ini dilakukan untuk menjamin bahwa masih ada ruang yang kosong untuk menambahkan elemen baru pada stack. Adapun perintah Pop akan mengambil elemen paling atas pada tumpukan sehingga jumlah elemen berkurang dan harus didahului dengan perintah isEmpty. Mengapa? karena sebelum mengambil sebuah elemen pada stack harus dipastikan dulu bahwa stack tersebut tidak kosong. Berbeda dengan Queue, Stack menganut prinsip Last In First Out (LIFO). Elemen yang terakhir masuk ke dalam stack akan pertama kali dikeluarkan karena sifat stack yang membatasi operasi hanya bisa dilakukan pada salah satu sisinya saja (bagian atas tumpukan)

Continue reading “Algoritma dan Struktur Data”

Desain dan Analisis Algoritma; Sebuah Pengantar


Hallo semua, kali ini saya akan mencoba menulis sebuah artikel tentang Desain dan Analisis Algoritma. Anak ilmu komputer, teknik informatika, matematika tentu sudah sangat familiar dengan tema ini. Namun tak ada salahnya kita coba ulas kembali untuk menyegarkan ingatan kita. Sippps?! Namun, sebelum kita bahas terlalu dalam, alangkah baiknya kita mengulang beberapa hal.

Secara umum, algoritma adalah sebuah prosedur atau langkah-langkah komputasi yang terdifinisikan dengan baik yang membutuhkan nilai/kumpulan nilai sebagai inputnya dan menghasilkan nilai/kumpulan nilai sebagai outputnya. Dari definisi ini maka bisa kita ambil kata kunci bahwa algoritma itu terdiri dari 3 elemen, ada input, proses, dan output. Algoritma ini digunakan untuk menyelesaikan permasalahan komputasi yang jelas (masalahnya harus jelas ya hehe). Biasanya, dalam sebuah permasalahan komputasi akan tergambarkan bagaiamana hubungan antara input dan output. Contoh sederhananya misalkan Continue reading “Desain dan Analisis Algoritma; Sebuah Pengantar”

Bahaya Besar di Balik Kesederhanaan SNMP

Simple Network Management Protocol (SNMP) adalah sebuah protokol yang digunakan untuk memonitor berbagai macam perangkat yang terkoneksi ke jaringan seperti router, switch, server, printer, dan sebagainya. SNMP terdiri dari 3 bagian yaitu Network Management Station (NMS), Agent, dan Management Information Base (MIB). NMS berfungsi sebagai pusat kendali aktivitas SNMP. Agent merupakan software yang berjalan pada perangkat yang dimonitor sedangkan MIB berisi informasi tentang perangkat yang dimonitor. Proses kerja SNMP diwakili oleh 3 aktivitas yaitu get request untuk menerima manajemen data dari perangkat, set request memodifikasi konfigurasi perangkat, dan trap message yang memungkinkan perangkat mengirimkan notifikasi asynchronous dan sinyal ketika terjadi perubahan kondisi pada perangkat seperti suhu melewati batas yang ditetapkan. Komunikasi data SNMP menggunakan protokol UDP, agent menerima permintaan dari NMS pada port 161 sedangkan NMS menerima sinyal trap pada port 162.
SNMP digunakan secara masif karena sederhana. Hampir semua perangkat jaringan mendukung protokol ini. Namun berdasarkan data Common Vulnerability and Exposure (CVE) ditemukan banyak kerentanan pada SNMP. Kerentanan ini terutama pada SNMP v1 dan v2 yang tidak mengenkripsi datanya seperti SNMPv3. Kenyataannya, banyak perangkat yang beroperasi saat ini masih menggunakan SNMPv1 atau v2 dengan alasan perangkat tidak kompatibel dengan v3 atau admin yang malas mengupgrade SNMP-nya. Beberapa kerentanan yang ditemukan yaitu kesalahan NMS dalam men-decode dan memproses trap message dan kesalahan agent dalam men-decode dan memproses get request message. Selain itu terdapat pengaturan yang tidak aman seperti tidak dibutuhkannya pesan SNMP untuk menggunakan community name (password) yang tepat dalam berkomunikasi. Penggunaan UDP yang connectionless menyebabkan NMS atau agent bisa menerima request atau trap dari agent atau NMS di luar jaringan lokal (spoofing). Community name yang tidak terenkripsi pada SNMPv1 dan v2 menyebabkan penyerang dapat melakukan sniffing pada paket dan mendapatkan community name untuk dieksploitasi. Kerentanan ini bisa berakibat DDOS attack, format string vulnerability, ataupun buffer overflow.
Salah satu contoh kerentanan terbaru SNMP menurut CVE yaitu fungsi snmp_pdu_parse di snmp_api.c (net-snmp 5.7.2 dan versi sebelumnya) tidak menghapus variabel varBind pada netsnmp_variable_list ketika memparsing SNMP PDU fails, yang memungkinkan penyerang melakukan serangan DDOS dan mengeksekusi sembarang kode melalui sebuah crafted packet (CVE-2015-5621).  Kerentanan ini diumumkan pada April 2015 dan menginfeksi Ubuntu 12.04 (32 dan 64bit), Red Hat Enterprise 6, Oracle Enterprise Linux 6, IBM Tivoli Netcool/OMNIbus 7.3, dan Centos 6. Kerentanan ini dapat dieksploitasi tanpa akses ke jaringan lokal, tidak membutuhkan kondisi khusus atau tahap yang kompleks untuk dieksploitasi serta tidak membutuhkan otentikasi. Pengaruh yang ditimbulkan yaitu penyerang dapat mengakses dan memodifikasi file system pada area tertentu (akses terbatas). Selain itu, penyerang bisa melakukan interupsi dan menurunkan kinerja sistem. Beragam vendor telah mengeluarkan patch untuk memperbaiki kerentanan tersebut.
Beberapa solusi untuk mengurangi kerentanan pada SNMP sebagai berikut :
Gunakan SNMPv1 scanner untuk mengidentifikasi perangkat yang SNMP-nya sedang aktif
Pasang patch yang disediakan oleh vendor
Matikan service SNMP pada perangkat yang tidak membutuhkannya
Terapkan ingress dan egress filtering pada firewall untuk protokol UDP port 161 dan 162 untuk paket yang masuk dan keluar untuk mencegah serangan dari luar atau inisiasi dari dalam sistem.
Ganti community string default pada perangkat sehingga tidak mudah ditebak oleh penyerang.
SNMP adalah sebuah protokol yang sangat bermanfaat untuk mengelola sistem. Namun perlu diketahui bahwa SNMP memiliki banyak kerentanan sehingga perlu diperhatikan untuk menjaga keamanan sistem.

Social Engineering, Ancaman Keamanan Sistem Informasi

image

Social engineering adalah sebuah metode untuk masuk ke sebuah sistem tanpa menerobosnya secara langsung atau mengeksploitasi kerentanannya (vulnerability). Akan tetapi, metode ini mengeksploitasi kerentanan pada manusia yang berada di sekitar sistem. Cara ini banyak digunakan karena lebih mudah dan efektif. Penyerang tidak perlu bersusah payah menembus keamanan sistem untuk menanamkan malware. Cukup memanfaatkan kelemahan manusia seperti kelalaian, keingintahuan, kecerobohan, ketidaktahuan, ketidakwaspadaan, dan sebagainya. Jika diibaratkan 1 manusia 1 celah, maka dengan metode social engineering jumlah celah keamanan sistem sama dengan jumlah manusia yang ada dalam organisasi tersebut.
Social engineering selalu dimulai dengan mengumpulkan informasi awal terkait target serangan. Informasi dapat berupa data pejabat eksekutif, struktur organisasi, nomor telepon, laporan organisasi, dan sebagainya. Berbagai informasi ini bisa didapatkan melalui internet. Selain itu, penyerang dapat mengumpulkan latar belakang, aktivitas, dan kebiasaan orang tertentu yang berada di dalam organisasi tersebut dengan memanfaatkan media sosial dan jejaring lainnya.
Selanjutnya, penyerang dapat melakukan impersonate terhadap karyawan sistem informasi untuk mendapatkan berbagai informasi dari karyawan lainnya.
Continue reading “Social Engineering, Ancaman Keamanan Sistem Informasi”

Comment with Sticker on Your Facebook

Facebook comment

Setelah sukses dengan fitur sticker pada chat, Entah kapan mulainya, kini fitur sticker juga telah tersedia pada bagian komentar. Tentu saja hal ini menjadikan aktivitas komentar di facebook semakin menarik bagi sebagian orang. Namun bagi sebagian yang lain bisa jadi kehadiran sticker pada bagian komentar adalah “sampah” yang merusak pemandangan mata mereka.

Kehadiran sticker tentu saja bisa kita katakan mengikut pada trend aplikasi seperti Line, Kakao Talk dsb. Sehingga bagi user hal ini bukanlah suatu inovasi yang baru. Mungkin langkah ini adalah strategi Facebook untuk menghidupkan kembali timeline yang semakin hari semakin ditinggalkan oleh pengguna. Khususnya di beberapa negara maju seperti US, dan UK.
Untuk berkomentar dengan sticker cukup klik icon wajah pada kolom komentar. Setelah itu list sticker akan muncul dan pilih sticker yang ingin digunakan. Sampai tulisan ini diturunkan komentar menggunakan sticker belum bisa digabungkan dengan tulisan sebagaimana fasilitas komentar menggunakan gambar. Fitur komentar (comment) menggunakan sticker kini tersedia untuk Facebook versi desktop ataupun versi mobile

Semantik Web

Semantic Web tidak terpisah dengan Web tetapi perluasan dari yang ada saat ini, yang mana informasi diberikan dengan arti yang terdefinisi dengan baik, sehingga computer dan orang dapat bekerja sama dengan lebih baik (Berners-Lee et al, 2001). Salah satu cara untuk mencapai tujuan ini adalah dengan memberikan informasi pada Web dengan arti yang terdefinisi dengan baik. Beberapa bahasa markup dikembangkan untuk tujuan ini.
Bahasa dengan tingkat lebih tinggi dalam lapisan Semantic Web menggunakan sintak dan semantik dari level yang lebih rendah.

Continue reading “Semantik Web”