Monday, June 24, 2013

Perlindungan Server terhadap teknik Brute Force dan Dictionary Matching

Pendahuluan
Teknik brute atau pencocokan kamus adalah jenis serangan yang paling lazim digunakan pada sebuah server.

Tutorial kali ini, saya ingin menjelaskan mengenai bagaimana melindungi server dari serangan brute force maupun dictionary matching pada layanan ssh menggunakan fail2ban.

Teknik serangan
Software yang digunakan untuk menyerang adalah THC-Hydra (http://www.thc.org/thc-hydra/).


Jangan selalu berkonotasi negatif setiap mendengar atau memperoleh software hacking karena semuanya kembali pada masing-masing individu.

White Hacker dapat memanfaatkan software ini untuk menguji password dari user-user yang mereka kelola. Seandainya ada user yang menggunakan weak password, administrator dapat memberikan user tersebut sebuah peringatan untuk mengganti password mereka dengan password yang lebih kuat.

Hydra adalah sebuah perangkat lunak untuk melakukan proses login secara looping dengan memasukkan kombinasi username dan password dari sebuah file yang telah berisi daftar. Software ini sebenarnya hanya memudahkan hacker "mencoba-coba" login dari sebuah layanan.
Layanan yang dapat di handle oleh software hydra ini cukup banyak: cisco cisco-enable cvs firebird ftp[s] http[s]-{head|get} http[s]-{get|post}-form http-proxy http-proxy-urlenum icq imap irc ldap2 ldap3[-{cram|digest}md5] mssql mysql ncp nntp oracle-listener oracle-sid pcanywhere pcnfs pop3 postgres rdp rexec rlogin rsh sip smb smtp smtp-enum snmp socks5 ssh svn teamspeak telnet vmauthd vnc xmpp

Tutorial ini hanya membahas mengenai SSH saja.

Prerequisites
Instalasi hydra cukup mudah. Karena saya menggunakan sistem operasi ubuntu, perintah-perintah berikut mohon disesuaikan sendiri.

# sudo apt-get install hydra hydra-gtk

Oke setelah kita menginstall software hydra, kita perlu mempunyai daftar kata sandi atau password yang nanti akan kita "coba-coba"-kan untuk seorang user. Daftar kata sandi dapat diperoleh di: http://www.winedt.org/Dict/.
Untuk tutorial kali ini, saya ingin membuat dictionary saya sendiri. Biar lebih ringkas dan lebih cepat karena hanya sebagai contoh.

# nano pass.txt
football
flower
123
1234
12345
123456
654321
54321
4321
321

Oke. Sekarang kita telah memiliki software hydra dan file pass.txt. Berikutnya kita tentukan target serangan kita. Ingat! Jangan pernah menentukan target serangan tanpa alasan yang jelas! Tutorial ini hanya akan menyerang localhost.

Untuk menyerang sebuah host menggunakan hydra, kita gunakan perintah dan parameter berikut:

# hydra -l andi -P pass.txt localhost ssh

Keterangan:
-l : Menunjukkan bahwa kita sudah tahu bahwa username dari host yang akan kita serang adalah andi.
Jika kita belum tahu username dan akan kita coba-coba dari file user.txt (file yang berisi daftar username) yang telah kita miliki maka perintahnya:
# hydra -L user.txt -P pass.txt localhost ssh

Begitu juga kalau kita sudah tahu password yang digunakan tapi tidak tahu username pemilik password tersebut.

# hydra -L user.txt -p pass123 localhost ssh

Nah sudah tahu fungsi -l, -L, -p dan -P kan?

Output:
# hydra -l andi -P pass.txt localhost ssh
Hydra v7.1 (c)2011 by van Hauser/THC & David Maciejak - for legal purposes only

Hydra (http://www.thc.org/thc-hydra) starting at 2013-06-24 13:36:55
[DATA] 12 tasks, 1 server, 12 login tries (l:1/p:12), ~1 try per task
[DATA] attacking service ssh on port 22
[22][ssh] host: 127.0.0.1   login: andi   password: 54321
[STATUS] attack finished for localhost (waiting for children to finish)
1 of 1 target successfuly completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2013-06-24 13:37:01

Bagian yang tercetak tebal adalah apa yang kita cari.

Cukup mudah bukan?


Bagaimana server mengetahui bahwa dia sedang diserang?

Sebenarnya server tahu dan mencatat (logging) apa yang terjadi di server. Tapi that's it. Hanya itu. Tidak ada aksi apa-apa yang dilakukan oleh server. Inilah tujuan dari tutorial kalo ini. Kita akan membuat aksi atas apa yang telah dicatat dalam berkas log.

Perhatikan berkas auth.log berikut:

Dari berkas log tersebut, terlihat ada banyak sekali kesalahan login untuk user "andi". Bukan itu sebenarnya yang kita kuatirkan. Tapi perhatikan pada 8 baris paling akhir:


Artinya. Password "andi" berhasil ditemukan!

Pencegahan:
Jika server sebenarnya "mencatat" kejadian abnormal yaitu login berulang tapi salah terus, terus So What? Useless jika tidak ada aksi apa-apa terhadap aktifitas tersebut. Tidak bijak juga "menunggu" administrator memperbaiki hal ini. Alangkah baiknya server "segera" melakukan tindakan untuk:
  1. Menutup akses ssh untuk host penyerang via firewall
  2. Mengganti password si andi secara sepihak menggunakan password generator
  3. Mengganti secara sementara shell andi supaya jika hacker berusaha masuk lewat pintu tersebut, dia akan "terpenjara" pada shell yang tidak bisa apa-apa.
  4. Mengaktifkan port knocking untuk melindungi port ssh.
  5. Atau tindakan apapun yang dapat menyelamatkan user andi secara khusus atau system secara keseluruhan
Tutorial kali ini saya ingin mencoba cara pertama yaitu menutup akses ssh untuk host penyerang via firewall.

Sebelum saya masuk pada bagaimana cara melindungi service ssh terhadap serangan brute force, saya ajak anda terlebih dulu untuk "membedakan" mana yang berusaha masuk lewat cara yang benar dan mana yang berusaha masuk melalui hydra. User normal (bukan robot) idealnya hanya akan melakukan kesalahan login satu kali login kedua seharusnya sudah bisa masuk. Beberapa system memberi toleransi kesalahan hingga 2x. Artinya jika user salah hingga ke 3x-nya, system akan HALT, LOCK Down, dsb.
Untuk tutorial kali ini, saya lebih toleran lagi yaitu 5x. :)

Oke ini yang perlu kita siapkan.
1. Bersihkan auth.log
Kita bersihkan dulu berkas auth.log yang tadi sudah ternodai (terkotori) dengan hydra. Mengapa? Hanya untuk memudahkan menjelaskan konsep fail2ban.
# cat /dev/null > /var/log/auth.log

2.  Install fail2ban
# sudo apt-get install fail2ban

3. Bersihkan dulu segala aturan firewall hanya untuk memudahkan penjelasan fail2ban.

# sudo iptables -F
# sudo iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         


4. Atur konfigurasi jail.conf
# sudo nano /etc/fail2ban/jail.conf
Perhatikan pada bagian:
ignoreip = 127.0.0.1/8 

// IP yang tidak akan diproses. Karena kita akan menyerang localhost, rubah menjadi (hapus IP 127.0.0.1) :
ignoreip =


Kemudian:

bantime  = 600
maxretry = 3

// Bagian ini menentukan berapa toleransi error yang anda "ijinkan". Karena saya akan mengijinkan kesalahan hingga 5x maka
bantime  = 600
maxretry = 5


Simpan konfigurasi ini.

5. Jalankan layanan fail2ban
# sudo /etc/init.d/fail2ban start

6. Perhatikan aturan firewall anda sekarang:
# sudo iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
fail2ban-ssh  tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 22
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        

Chain fail2ban-ssh (1 references)
target     prot opt source               destination        
RETURN     all  --  0.0.0.0/0            0.0.0.0/0


Pada bagian yang tercetak tebal, adalah aturan tambahan dari fail2ban.

7. Coba serang kembali localhost anda menggunakan hydra
# hydra -l andi -P pass.txt localhost ssh
Hydra v7.1 (c)2011 by van Hauser/THC & David Maciejak - for legal purposes only

Hydra (http://www.thc.org/thc-hydra) starting at 2013-06-24 19:24:47
[DATA] 12 tasks, 1 server, 12 login tries (l:1/p:12), ~1 try per task
[DATA] attacking service ssh on port 22
[22][ssh] host: 127.0.0.1   login: andi   password: 54321
[STATUS] attack finished for localhost (waiting for children to finish)
1 of 1 target successfuly completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2013-06-24 19:24:52


8. Aturan firewall yang baru
Lihat firewall anda sekarang
# sudo iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
fail2ban-ssh  tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 22

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        

Chain fail2ban-ssh (1 references)
target     prot opt source               destination        
DROP       all  --  127.0.0.1            0.0.0.0/0           

RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Terdapat aturan banned pada chain fail2ban-ssh (tercetak tebal) yang menandakan bahwa IP 127.0.0.1 tidak bisa melakukan "INPUT" ke server.

9. Pengujian
Ujilah untuk login ke server menggunakan user andi via ssh dari localhost
# ssh andi@localhost
ssh: connect to host localhost port 22: Connection timed out

Permasalahan:
Jika anda perhatikan IP yang ter-banned adalah host yang diindikasi melakukan serangan brute force atau dict matching ke sebuah server. Akan tetapi hacker:
1. Tetap mendapatkan password yang digunakan oleh user andi
2. Hacker bisa saja berpindah IP (yang tidak di banned) untuk mencoba login dengan user andi dan password 54321

Ada solusi?

Wednesday, June 12, 2013

Memahami Peta Karnaugh (1)

Pendahuluan

Peta Karnaugh adalah sebuah metode untuk:
1. Menyederhanakan sebuah fungsi persamaan logika. Menyederhanakan fungsi persamaan logika sebenarnya bisa dilakukan dengan menggunakan aturan-aturan baku seperti:
  • Distributif. Misalnya (p ∧ q) ∨ (p ∧ r) ≡ p ∧ (q ∨ r)  atau (p ∨ q) ∧ (p ∨ r) ≡ p ∨ (q ∧ r). 
  • De Morgan seperti ~p ∨ ~q ≡ ~(p ∧ q) atau ~p ∧ ~q
  • Hukum penyerapan  seperti p ∧ (p ∨ q) ≡ p atau p ∨ (p ∧ q) ≡ p
  • dll (Keterangan lengkap bisa dibaca di: http://id.wikipedia.org/wiki/Logika_matematika)
2. Mencari fungsi persamaan logika dari sebuah tabel kebenaran. Terkadang, kita memiliki sebuah tabel kebenaran (yang diperoleh dari pengumpulan kasus atau kejadian) tetapi belum memiliki persamaan logikanya sehingga sulit membuat untai rangkaian logikanya.

Permasalahan-permasalahan diatas dapat diselesaikan dengan peta karnaugh.

Peta Karnaugh
Peta karnaugh (atau K-Map) diperkenalkan oleh Maurice Karnaugh tahun 1953 (wikipedia) adalah sebuah metode untuk menyederhanakan fungsi persamaan logika sehingga (Freddy Kurniawan: Sistem Digital):
  1. Menggunakan jumlah gerbang lebih sedikit sehingga waktu tunda total untai menjadi lebih kecil
  2. Kemungkinan resiko kegagalan fungsi lebih kecil karena penggunaan gerbang dan perkawatan yang lebih sedikit
  3. Daya total yang dikonsumsi untai logika juga akan lebih kecil.
  4. Hemat biaya
Peta Karnaugh di-"ilustrasikan" seperti matrik 2 dimensi (terdiri atas baris dan kolom) dimana komponen baris dan kolom adalah masukan (input) dari sistem. Input dari masukan inilah yang kemudian disebut variabel K-Map nya. Sehingga ada sebutan K-Map 2 Peubah, K-Map 3 Peubah, 4 peubah dst.

K-Map efektif digunakan hanya sampai 6 peubah saja. Untuk peubah lebih dari 6, tidak lagi di-rekomendasikan menggunakan K-Map karena komputasinya sangat tinggi sehingga disarankan menggunakan program komputer khusus. Tutorial kali ini, saya akan membahas K-Map hingga 4 Variabel. Untuk K-Map 5 dan 6 Peubah akan dibahas pada tutorial berikutnya.

Menggambar peta karnagh
Peta Karnaugh 2 Peubah:
Ilustrasi berikut adalah peta karnaugh 2 peubah (A dan B).

Kelompok Baris adalah masukan A dan Kelompok Kolom adalah masukan B. Tidak ada yang spesial dari aturan K-Map 2 Variabel. Anda bisa menulisnya 0 kemudian 1 (sesuai contoh) atau 1 kemudian 0.
Sekarang kita lihat tabel kebenaran dari fungsi yang akan kita buat. Asumsikan, kita tidak memiliki fungsi persamaan dari tabel kebenaran berikut dan kita akan membuatnya.

Setiap cell dari matrik (bagian tengah) akan kita isi dengan hasil atau result dari tabel kebenaran. Sebagai contoh:

Peta Karnaugh 3 Peubah:
Sedikit berbeda dengan peta karnaugh 2 peubah, K-Map 3 peubah menggunakan 2 peubah di satu rusuk dan 1 peubah di rusuk yang lain. Anda bisa membuat K-Map dengan 2 peubah di rusuk tegak, dan 1 peubah di rusuk mendatar atau sebaliknya. Perhatikan gambar:


Yang perlu diperhatikan di sini adalah penyusunan kombinasi masukan 2 peubah harus mengikuti kaidah "perubahan di satu tempat". Artinya transisi dari "0" ke "1" hanya di satu tempat saja. Sebagai contoh, kombinasi masukan dari "01" menjadi "11". Transisi yang terjadi pada kombinasi ini hanya pada masukan A (dari 0 menjadi 1) sedangkan masukan B tetap (1 tetap 1). Jadi anda tidak boleh menulis "01" kemudian "10" (seperti yang biasa anda lakukan di tabel kebenaran). Mengapa? karena jika susunan-nya "01" kemudian "10", berarti perubahan terjadi di 2 masukan, A berubah dari "0" menjadi "1" dan masukan B berubah dari "1" menjadi "0".

Seperti pada K-Map 2 peubah, isi Cell dari K-Map 3 peubah juga berisi result (hasil) dari tabel kebenaran. Sebagai contoh:

Anda boleh menggunakan K-Map yang atas atau yang bawah.

Peta Karnaugh 4 Peubah:
Untuk K-Map 4 peubah, anda dapat memasukkan 2 peubah di rusuk tegak dan 2 peubah di rusuk mendatar. Perhatikan gambar:
Daerah Minterm
Nah sekarang kita sudah bisa menggambar peta Karnaugh atau K-Map dengan 2, 3 dan 4 peubah. Proses berikutnya adalah menentukan daerah minterm. Daerah minterm adalah sebuah daerah di dalam K-Map yang berisi nilai 1 yang "bertetangga" (akan dijelaskan dalam contoh). Keanggotaan sebuah daerah minterm bisa berisi 2^n dimana n bernilai 0, 1, 2, 3, ... dst. Sehingga keanggotaan wilayah minterm bisa 1, 2, 4, 8, 16, dst.
Melukiskan daerah minterm, bisa secara vertikal (atas bawah) atau horisontal (kiri dan kanan) tetapi tidak bisa secara diagonal.
Contoh daerah minterm untuk K-Map 2 peubah adalah sebagai berikut:

Keterangan:
(A): Karena nilai "1" hanya ada satu, maka daerah mintermnya juga hanya 1.
(B): Nilai "1" ada di dua tempat (cell) tetapi mereka bertetangga secara diagonal, maka angka-angka "1" tersebut tidak bisa menjadi satu wilayah minterm.
(C): Terdapat 2 wilayah minterm dengan masing-masing memiliki 2 anggota angka "1".
(D): Mirip dengan kasus point (B).

Sedikit berbeda untuk K-Map dengan dimensi yang lebih besar(di atas dimensi 2x2), K-Map "dipandang sebagai sebuah bidang yang "bulat" seperti globe. Artinya daerah minterm bisa saja "menyatukan" angka 1 yang di sisi atas dan bawah atau kiri dan kanan secara berputar. Lihat contoh di bawah ini:


Ingat: Tidak bisa diagonal saja.

Membangun persamaan dari daerah minterm di K-Map
Setelah daerah minterm sudah kita tandai, proses berikutnya adalah menentukan persamaan dari daerah minterm tersebut. Kita bisa menggunakan asas "konsistensi" untuk memudahkan membangun persamaan daerah minterm tersebut. Konsistensi yang saya maksud adalah nilai masukan yang TIDAK BERUBAH di setiap sel daerah minterm. Sebagai contoh untuk daerah minterm yang hanya berisi satu anggota seperti pada gambar berikut:

Karena kita tidak bisa membuat daerah minterm secara diagonal maka K-Map di atas memiliki 2 daerah minterm. Untuk daerah mintem yang berisi satu anggota saja, membuat persamaannya cukup mudah. Cukup lihat masukan untuk setiap daerah minterm tersebut.

Daerah minterm 1: masukan dari sisi baris adalah A'B dan dari sisi kolom adalah C'. Nilai akses (') di sini mengacu pada nilai 0 pada masukan A dan C (sedangkan karena nilai B bernilai "1" maka tidak diberi aksen atau NOT).
Daerah minterm 2: masukan dari sisi baris adalah AB dan dari sisi kolom adalah C (semua nilai masukan "1" maka tidak ada aksen)

Sehingga fungsi persamaan dari K-Map tersebut adalah: A'BC + ABC.
Pembuktian dengan tabel kebenaran:


Untuk daerah minterm yang berisi lebih dari satu, asas konsistensi bisa kita gunakan. Perhatikan contoh:

Pada contoh di atas, daerah mintem yang terbentuk memiliki empat anggota dimana masukannya adalah:
  1. Sisi Baris (AB): 01 dan 11
  2. Sisi Kolom (CD): 01 dan 11
Nilai yang konsisten di sisi baris adalah B. (A tidak konsisten karena ada A yang bernilai "1" dan ada A yang bernilai "0". Sedangkan nilai yang konsisten di sisi kolom adalah D. (nilai C tidak konsisten).
Sehingga persamaan untuk K-Map di atas adalah BD. Lihat pada tabel kebenaran berikut:


Contoh lain:

Daerah minterm 1 (yang berwarna biru): Masukan yang konsisten di sisi baris (masukan AB) adalah B dan masukan yang konsisten di sisi kolom adalah C sehingga rumus fungsinya adalah BC
Daerah minterm 2 (yang berwarna merah): Masukan yang konsisten di sisi baris (masukan AB) tidak ada (semuanya (baik A dan B) tidak ada yang konsisten) sedangkan masukan yang konsisten di sisi kolom adalah CD'.

Sehingga persamaan fungsi dari K-Map di atas adalah F = BC + CD'. Perhatikan tabel kebenaran berikut:


Cukup mudah bukan? Semoga bermanfaat.

Monday, June 3, 2013

Tutorial Addressing pada Mikroprosesor x86

Pendahuluan

Pada tutorial sebelumnya, kita telah mempelajari bagaimana siklus instruksi (yang disederhanakan pada 4 tahap: Fetch Instruction, Decode Instruction, Execute dan Write Output) menggunakan simulator PEP7. Tutorial kali ini kita akan menggunakan program Debug (bawaan MS Windows XP atau Win 7) untuk menjelaskan mode pengalamatan beserta contoh studi kasus.


Mode Pengalamatan

Ada beberapa mode pengalamatan pada CPU antara lain:
  1. Immediate Addressing
  2. Direct Addressing
  3. Register Addressing
  4. Indirect Addressing
Immediate Addressing
Adalah sebuah bentuk pengalamatan paling sederhana. Tidak ada referensi kemana-mana. Operand (data yang akan diolah) benar-benar ada dalam instruksinya. Keuntungan dari mode pengalamatan ini adalah Menghemat siklus instruksi sehingga proses keseluruhan menjadi cepat (karena tidak memerlukan referensi memori). Contoh mode pengalamatan immediate adalah:
MOV ax, 200h. 
Keterangan:
Kita akan "memasukkan" data 200h (hexa) ke register AX, sehingga AX akan berisi data 0200.

Direct Addressing
Adalah sebuah mode pengalamatan sederhana karena hanya memerlukan satu referensi memory sebagai operandnya. Artinya operand (data yang akan diolah) diletakkan di memory sehingga lebih besar dari operand yang "hanya" tertulis di instruksinya. Contoh mode pengalamatan langsung (direct addressing) adalah sebagai berikut:
MOV ax,[200h]
Keterangan:
Kita akan "memasukkan" data yang berada di memori alamat 200h ke dalam register AX. Ingat.. yang kita masukkan adalah data yang berada di alamat 200h dan bukan angka 200h.



Register Addressing.
Adalah sebuah bentuk "pengcopyan" isi register ke register yang lain. Contoh pengalamatan register adalah sebagai berikut:
MOV ax,bx
Keterangan:
Kita akan memasukkan (mengcopy) isi dari register BX ke dalam register AX.


Indirect Addressing.
Adalah sebuah mode pengalamatan yang memerlukan lebih dari satu referensi (baik memory atau register) untuk mengambil operand-nya.
Contoh mode pengalamatan tidak langsung adalah:
MOV [bx],ax
Keterangan:
Kita akan memasukkan nilai yang berada di dalam alamat memory yang ditunjukkan pada register BX. Jadi kita harus melihat dulu berapa nilai BX (misal 200h) kemudian kita harus menengok isi memory di alamat 200h tersebut baru kita pindahkan isinya ke register AX.


Dasar Arsitektur Prosesor x86.
Sebelum kita masuk pada implementasi mode pengalamatan pada arsitektur x86 menggunakan program DEBUG, ada baiknya kita mengenal terlebih dulu register pada prosesor x86.

CPU dengan Prosesor x86 memiliki beberapa register yaitu:

16 bit General Purpose Registers. Register yang biasanya digunakan untuk keperluan-keperluan khusus. Akan dibahas pada tutorial berikutnya.
AX, BX, CX, dan DX yang di-breakdown menjadi 8 bit AH, AL, BH, BL, CH, CL, DH, dan DL.

Segment registers. Biasanya digunakan untuk instruksi-instruksi spesial atau multi-segmen programming.
CS DS ES FS GS SS

Index and pointers. Biasanya digunakan bersamaan dengan segmen register untuk menunjuk pada alamat yang lebar (diatas 1MB)
SI, DI, BP, IP, dan SP

Keterangan lebih lengkap, dapat dibaca disini.

Implementasi:

1.Menjalankan program DEBUG
Sekarang kita akan mencoba mempelajari 4 mode pengalamatan di atas menggunakan program DEBUG. Untuk menjalankan program debug, kita tidak perlu menginstall secara khusus. Cukup buka start -> Run -> cmd kemudian ketik debug dan kita akan menjumpai prompt debug (biasanya cuma sebuah garis kecil)

2. Melihat perintah-perintah dalam program DEBUG
Untuk melihat perintah apa saja yang bisa kita gunakan dalam program debug, ketik tanda tanya (?) hingga muncul tampilan:
Pada tutorial ini, saya hanya akan menggunakan perintah a (assemble), d (dump), r (register) dan t (trace).

3. Melihat isi register awal
Sebelum kita mencoba macam-macam, kita lihat dulu isi data awal di setiap register. Ketik r kemudian enter.

Dari gambar di atas, kita bisa melihat isi register general purpose (ax, bx, cx dan dx) semua berisi 0000h sedangkan IP (pointer instruksi) berada pada alamat 0100h yang berarti instruksi berikutnya yang akan diproses ada di alamat 100h.

4. Membuat program untuk Immediate Addressing:
  • Seperti telah dijelaskan di atas, contoh immediate addressing adalah mov ax, 200
  • Ketik a cs:100 (assemble code segment 100) yang berarti kita akan menulis instruksi di alamat 100h (sesuai alamat Instruction Pointer).
  • Untuk mengakhiri penulisan kode program, cukup enter saja.
  • Untuk menjalankan program yang telah kita buat, ketik t (trace) seperti terlihat pada gambar di bawan ini
  • Dari output di atas, dapat kita lihat bahwa register ax telah berisi data 0200.
5. Membuat program untuk Direct Addressing
  • Seperti telah dijelaskan di atas, contoh Direct Addressing adalah mov ax, [200]
  • Seperti biasa, cek terlebih dulu isi register menggunakan r. Saya mereset seluruh isi register hanya untuk memudahkan tutorial ini saja.
  • Ketik kode dibawah ini:
  • Sebelum kita menjalankan program ini, kita cek terlebih dulu isi operand di alamat 200 menggunakan perintah d ds:200 (dump data segment 200).


  • Dari perintah dump di atas, kita dapat melihat bahwa isi dari alamat 200 adalah 81 CD. Data inilah yang nanti akan kita masukkan ke register ax.
  • Jalankan listing (instruksi) yang telah kita ketik tadi dengan t (trace)
  • Dari output di atas kita bisa melihat sekarang isi register ax adalah CD81. Ingat posisinya LSB (least significant bit) adalah bit kanan dan MSB (most significant bit) di bit kiri.
6. Register Addressing
  • Contoh register addressing adalah pen-copy-an data antar register. Misalnya mov bx, ax
  • Dengan menggunakan contoh sebelumnya dimana register ax telah berisi data CD81h akan kita copy ke register bx.
  • IP (instruction pointer) berada di alamat 103h yang berarti kita bisa menuliskan program di alamat tersebut.
  • Berikut contohnya:

  • Dari output di atas, kita bisa melihat bahwa register BX nilainya sama dengan register AX yaitu CD81h
7. Indirect Addressing.
  • Terakhir (untuk tutorial ini), kita akan mencoba mode pengalamatan tidak langsung
  • Contoh mode pengalamatan tidak langsung, kita akan memindahkan isi register AX ke memori yang alamatnya ditunjuk oleh isi register BX
  • Perintahnya adalah mov [bx],ax
  • Pertama, kita masukkan dulu nilai ABCDh di register AX
  • Kedua, kita masukkan nilai BBBBh pada register BX
  • Ketiga, kita lihat isi memori di alamat BBBBh
  • Keempat kita eksekusi
  • Berikut langkah lengkapnya:

Selamat mencoba..

Wednesday, May 29, 2013

Mari Bermain Dengan PEP/7

Pendahuluan

PEP/7 adalah sebuah mesin virtual yang digunakan kalangan akademisi untuk menjelaskan dan menyederhanakan bahasa komputasi terendah (baca: machine language). Sesuai namanya, PEP/7 memiliki 7 buah register.

Register-register dalam PEP/7 adalah:
  1. Status bits (NZVC)
  2. Index Register
  3. Program Counter
  4. Instruction Register
  5. Accumulator
  6. Base Register
  7. Stack Pointer
Berikut gambar simulator PEP/7
Format Instruksi

Sebuah instruksi dalam PEP/7 memiliki 2 bagian:
  1. 8 bit instruction specifier
  2. 16 bit operand specifier
 Berikut penjelasan dalam gambar
Instruction Specifier disusun dalam 3 bagian:
  1. Kode Operasi (Baca: Operation Code atau Opcode)
  2. Register Specifier. Register ini bernilai 0 jika register A (Accumulator) sedang dilibatkan dalam sebuah operasi dan bernilai 1 jika register X (indeX register) sedang dilibatkan.
  3. Addressing-mode Specifier. 2-bit addressing-mode specifier menjelaskan bagaimana menterjemahkan bagian operand part dari sebuah instruksi. Misal 00 untuk Immediate Addressing dan 01 untuk Direct Addressing.
Beberapa contoh instruksi:
Mari kita coba:
Kita akan menulis kata Hello pada layar.
Berikut instruksinya:
Keterangan
Instruksi 1: 
Menulis huruf H. Pada table Opcode, charakter output dikodekan sebagai 11100 (5 bit pertama dari instruction specifier). Bit ke 6 (yang berwarna hitam) berisi 0 artinya operand yang akan diambil adalah akumulator. Bit ke 7 dan 8 menunjukkan mode pengalamatan. Tertulis 00 yang berarti Immediate Addressing. Sehingga format lengkap dari instruction spesifier adalah 11100000 biner (atau E0 dalam hexa)
Operand Specifier berisi data yang akan ditampilkan. Karena kita akan menulis "H" (dalam ascii H dikodekan dengan 48) maka kita tulis 0048.

Begitu seterusnya sehingga kita mendapat data lengkap di memory adalah:
Sekarang saatnya kita tulis memory tersebut pada simulator PEP7. (Simulator dapat dicoba di http://www.rsu.edu/faculty/pmacpherson/programs/pep7.html).

Untuk memudahkan pembacaan, klik view hex sehingga bukan dalam format biner.
  1. Klik edit memory pada simulator
  2. Isikan Address (Hex) pada memory editor dengan 00 (kita menulis data pada alamat 00 di memory) dan Value (Hex) dengan E0
  3. Klik Set memory
  4. Ganti Address dengan 01 dan Value 00 (jangan lupa set memory)
  5. Ganti Address dengan 02 dengan 48 (jangan lupa set memory).
  6. Begitu seterusnya hingga 
Eksekusi
Untuk menjalankan rangkaian perintah yang telah kita masukkan dalam prosesor, kita bisa mengklik tombol paling kiri (saya tidak bisa bilang Fetch karena tombol ini akan berubah-rubah sesuai tahapan siklus instruksi).
Nah disinilah kita bisa melihat tahapan-tahapan siklus instruksi dalam sebuah prosesor. Siklus instruksi dalam sebuah prosesor adalah sebagai berikut:
  • Tahapan pengambilan (Fetch).
  •  Tahapan Penterjemahan instruksi (Decode).

  • Tahap Increment. (Klik saja).
  • Tahap Eksekusi (Execute).
  • Terus ulangi hingga seluruh rangkaian perintah selesai dijalankan dan output akhirnya adalah sebagai berikut:

Selamat mencoba.

Tuesday, May 28, 2013

Mematikan Direktori List di Apache2


Terkadang sebuah web sites memiliki banyak direktori (yang tersusun dalam directory tree) dan di dalam direktori tersebut terdapat beberapa file yang "tidak ingin" (baca: bukan tidak bisa) orang lain lihat. Cara rumitnya kita bisa membuat file index.php (atau index.html) supaya pengunjung "tidak bisa" melihat list file dan directory di dalamnya di setiap folder (directory) tersebut.



Cara ini bisa dibilang ampuh tapi sisi sulitnya, kita harus mencopy (membuat) file tersebut di setiap directory yang kita miliki. Hal ini merepotkan dan tidak praktis.

Kita bisa mendisable directory list di apache 2 dengan sedikit cara sederhana berikut:
  • Buka file /etc/apache2/sites-available/default
  • Cari bagian Options Indexes FollowSymLinks MultiViews kemudian hapus kata Indexes (atau tambahkan (-) di depan kata indexes tersebut
 
  • Simpan kemudian restart apache2 /etc/init.d/apache2 restart
  • Selesai


Nah masalah baru muncul, ada kalanya kita ingin membuat directory list di sebuah folder saja (folder yang lain kita tutup). Kita bisa membuat file index.php di folder tsb supaya menampilkan isi file (dan subfolder) di directory tersebut.
Berikut file index.php tsb (saya ambil dari (c) Kai Blankenhorn www.bitfolge.de kaib@bitfolge.de)


 Selamat mencoba...

Monday, May 27, 2013

Basic Oracle Query (Modul Praktikum SBD TF STTA)

Berikut contoh beberapa query pada oracle 11G. Tutorial ini saya gunakan untuk modul praktikum Sistem Basis Data jurusan Teknik Informatika STTA.


Friday, May 24, 2013

PHP: Membuat compiler online menggunakan shell_exec

Pendahuluan

PHP memiliki fungsi shell_exec untuk mengeksekusi perintah shell linux menggunakan PHP. Berikut contoh penggunaan fungsi shell_exec untuk meng-compile script bahasa C menggunakan PHP di mesin Linux Ubuntu 12.04. Tulisan ini kontradiktif dengan sistem keamanan di Linux. Jadi jangan diprotes kalo prosedur di bawah ini dipandang tidak aman. :)

Prerequisities

1. Daftarkan www-data pada /etc/sudoers
# nano /etc/sudoers
www-data ALL=NOPASSWD: ALL

maksudnya: www-data (user dari www) dapat menjalankan sudo tanpa password.

2. Matikan magic quota di php.ini
# nano /etc/php5/apache2/php.ini
magic_quotes_gpc = Off

maksudnya supaya karakter yang dimasukkan dalam form, tidak ditambahkan karakter macam-macam oleh PHP.

3. Restart apache-nya
# /etc/init.d/apache2 restart

Implementasi:

Halaman input.php
<form action=compile.php method=get>
nama file <input type=text name=nama_file><br>
script anda <br>
<textarea name=isi_script rows="4" cols="50"></textarea><br>
<input type=submit value=kirim>
<form>

Halaman compile.php
<?
$nama_file=$_GET['nama_file'];
$isi_script=$_GET['isi_script'];
echo "nama file = $nama_file<br>";
echo "isi_script = $isi_script<br>";

//output file
$output_file = str_replace('cpp','exe', $nama_file);
$buat_file = 'sudo touch '.$nama_file;
echo "$buat_file<br>";

//proses buat file
shell_exec($buat_file);

//proses permisi root
$permisi = "sudo chmod 777 ".$nama_file;
shell_exec($permisi);

//proses memasukkan content ke file
file_put_contents($nama_file,$isi_script);

//membuat file exe (proses compile)
$buat_exe = "sudo i586-mingw32msvc-gcc $nama_file -o $output_file";
echo "$buat_exe<br>";
$result = shell_exec("$buat_exe 2>&1");
echo "hasil = $result<br>";
?>

Selamat mencoba.

Thursday, May 23, 2013

PHP: Mengendalikan Mikrotik dengan API

Pendahuluan:


Penambahan aturan di Mikrotik dapat dilakukan menggunakan beberapa metode diantaranya menggunakan Winbox, SSH atau Telnet. Kita bisa menambahkan aturan-aturan baru di Mikrotik menggunakan aplikasi PHP. Tujuannya untuk memudahkan administrator menambah aturan di mikrotik berdasarkan SOP di institusi dan nantinya bisa dilakukan otomatis.

Prerequisities:
  • Pastikan Mikrotik membuka layanan API dan tidak ada rule input untuk user masuk lewat API. Pilih IP > Service menggunakan winbox seperti pada gambar:

Implementation


  • Contoh 1: Berikut contoh sederhana membuat aturan simple queue menggunakan PHP:

<?php

require('routeros_api.class.php');


// Ubah sesuai setting mikrotik Anda
define('MIKROTIK_IP', '192.168.0.1');
define('MIKROTIK_USERNAME', 'admin');
define('MIKROTIK_PASSWORD', '');
define('SERVER', 'all');
define('PROFILE', 'default');


$API = new routeros_api();
// Aktifkan debug
// $API->debug = true;

$nama = "Andi";
$ip = "192.168.1.2";
$limit = "50000/500000";

if ($API->connect(MIKROTIK_IP, MIKROTIK_USERNAME, MIKROTIK_PASSWORD))
{
$API->write('/queue/simple/add', false);
$API->write('=name='.$nama,false);
$API->write('=target-addresses='.$ip, false);
$API->write('=max-limit='.$limit, false);
$API->write('=disabled=no');

$ARRAY = $API->read();
//print_r($ARRAY);

}
$API->disconnect();

echo "<p>Aturan telah ditambahkan..<br>";
?>


-----------------------------------------------------------
  • Contoh 2: Berikut contoh sederhana melihat output torch:

<?php
require('routeros_api.class.php');

// Ubah sesuai setting mikrotik Anda
define('MIKROTIK_IP', '192.168.1.1');
define('MIKROTIK_USERNAME', 'admin');
define('MIKROTIK_PASSWORD', '12345');
define('SERVER', 'all');
define('PROFILE', 'default');

$src_address = "192.168.1.2";

$API = new routeros_api();
// Aktifkan debug
// $API->debug = true;

if ($API->connect(MIKROTIK_IP, MIKROTIK_USERNAME, MIKROTIK_PASSWORD))
{
 $API->write('/tool/torch', false);
 $API->write('=src-address='.$src_address, false);
 $API->write('=duration=2', false);
 $API->write('=interface=ether2-lokal', false);

 $ARRAY = $API->read();
 //print_r($ARRAY[$no]);
 echo "<p>";
 $source = $ARRAY[0]['src-address'];
 $tx = $ARRAY[0]['tx'];
 $rx = $ARRAY[0]['rx'];

 echo "source = $source<br>";
 echo "tx = $tx<br>";
 echo "rx = $rx<br>";
 echo "-------------------------------------<p>";

 }

$API->disconnect();
}

echo "<p>Selesai..<br>";
?>


-------------------------------------------------------------
  • Contoh 3: Menambah aturan NAT
<?php
require('routeros_api.class.php');

// Ubah sesuai setting mikrotik Anda
define('MIKROTIK_IP', '192.168.1.1');
define('MIKROTIK_USERNAME', 'admin');
define('MIKROTIK_PASSWORD', '12345');
define('SERVER', 'all');
define('PROFILE', 'default');

$API = new routeros_api();
// Aktifkan debug
$API->debug = true;

if ($API->connect(MIKROTIK_IP, MIKROTIK_USERNAME, MIKROTIK_PASSWORD))
{
$API->write('/ip/firewall/nat/add', false);
$API->write('=chain=srcnat',false);
$API->write('=src-address=192.168.90.0/24',false);
$API->write('=action=masquerade', false);
$API->write('=disabled=yes');

$ARRAY = $API->read();

}
$API->disconnect();

echo "<p>Selesai..<br>";
?>


Keterangan:
Script diatas digunakan untuk menambah satu aturan NAT yang klo di CLI (Command Line Interface) nulisnya:

ip firewall nat add chain=srcnat src-address=192.168.90.0/
24 action=masquerade disabled=yes 


Contoh2 lainnya bisa dilihat di:
http://wiki.mikrotik.com/wiki/API_PHP_class

Monday, May 20, 2013

Instalasi IBM Storage DS3000 pada Windows Server 2008

Pendahuluan
Saat pertama kali melihat IBM Storage DS3000 sumpah gak mudeng sama sekali. Konektor yang saya kenal hanya konektor RG 45 dan konektor power. Itupun ada 2 (mana yang harus saya tancapkan???).
Gak ada colokan monitor, PS2 maupun USB. Untung saja nemu tutorial di http://www.redbooks.ibm.com/redbooks/pdfs/sg247065.pdf

Tulisan ini hanya memudahkan untuk instalasi.