Jumat, 07 Juni 2013

Hacking Tools dan Malware

Hacking adalah kegiatan menerobos program komputer milik orang/pihak lain. Hacker adalah orang yang gemar meretas komputer, memiliki keahlian membuat dan membaca program tertentu, dan terobsesi mengamati keamanan (security)-nya. Hacker memiliki wajah ganda; baik atau jahat. Hacker baik memberi tahu kepada programer yang komputernya diterobos, akan adanya kelemahan-kelemahan pada program yang dibuat, sehingga bisa “bocor”, agar segera diperbaiki. Sedangkan, hacker jahat, menerobos program orang lain untuk merusak dan mencuri datanya.Banyak sekali definisi mengenai Hacking itu sendiri. Dari suatu aktifitas penyusupan ke sebuah sistem komputer atau jaringan dengan tujuan untuk merusak sistem tersebut, menerobos program komputer milik orang, ngutak atik sesuatu, memecahkan masalah software maupun hardware, mengakses server kemudian mengacak-acak website yang ada di server itu, dan masih banyak lagi. 


Berikut beberapa istilah dalam hacking tools :

  • Vulnerability  Dalam system security komputer, istilah Vulnerability merupakan suatu kelemahan yang memungkinkan seseorang untuk masuk dan mendapatkan hak akses kedalam komputer yang dituju(target). Biasanya vulnerability adalah kelemahan yang dikarenakan kesalahan setting ataupun ataupun ketidaktahuan administrator.
  • Exploit adalah sebuah kode yang menyerang keamanan_komputer secara spesifik. Exploit banyak digunakan untuk penentrasi baik secara legal ataupun ilegal untuk mencari kelemahan (Vulnerability) pada komputer tujuan. Bisa juga dikatakan sebuah perangkat lunak yang menyerang kerapuhan keamanan (security vulnerability) yang spesifik namun tidak selalu bertujuan untuk melancarkan aksi yang tidak diinginkan. Banyak peneliti keamanan komputer menggunakan exploit untuk mendemonstrasikan bahwa suatu sistem memiliki kerapuhan.

  • Payload Payload dalam dunia security yaitu pembawa exploit yang digunakan untuk mengeksekusi shellcode. Payload kemudian akan menjalankan shellcodeyang dipilih pada target komputer untuk mendapatkan akses kedalam komputer tujuan (target).

  • Shellcode adalah kode yang digunakan dengan payload untuk mengeksploitasi komputer    target. Biasanya shellcode dibuat untuk dapat mengontrol komputer, ataupun mendapatkan hak akses komputer target, atau yang lainnya. Shellcode dimasukkan kedalam kode exploit dengan tujuan membaypass fungsi suatu software, sehingga software tersebut tidak berjalan secara semestinya, melainkan menjalankan fungsi pada Shellcode. 



PENGERTIAN MALWARE
Malware adalah Perangkat perusak berasal dari kata malicious dan software adalah perangkat lunak yang diciptakan untuk menyusup atau merusak sistem komputer, peladen atau jejaring komputer tanpa izin dari pemilik. Istilah ini adalah istilah umum yang dipakai oleh pakar komputer untuk mengartikan berbagai macam perangkat lunak atau kode perangkat lunak yang mengganggu atau mengusik.

Jenis-Jenis Malware


  1. Virus Komputer adalah Jenis malware yang menyerang file eksekusi (.exe) yang akan menyerang dan menggandakan diri ketika file exe yang terinfeksi di jalankan. Virus komputer menyebar dengan cara menyisipkan program dirinya pada program atau dokumen yang ada dalam komputer. 
  2. Worm alias cacing adalah sebuah program komputer yang dapat menggandakan dirinya sendiri dan untuk penyebarannya tidak perlu campur tangan dari user itu sendiri dengan memanfaatkan suatu jaringan
  3. Spyware adalah program yang bertindak sebagai mata-mata untuk mengetahui kebiasaan pengguna komputer dan mengirimkan informasi tersebut ke pihak lain. Spyware biasanya digunakan oleh pihak pemasang iklan.
  4. Adware adalah iklan yang dimasukkan secara tersembunyi oleh pembuat program, biasanya pada program yang bersifat freeware untuk tujuan promosi atau iklan.
  5. Trojan atau trojan hourse adalah program yang diam-diam masuk ke komputer, kemudian memfasilitasi program lain misalnya virus, sypware, adware. keylogger dan malware lainnya untuk masuk, merusak sytem, memungkinkan orang lain meremote komputer dan mencuri informasi seperti password atau nomor kartu kredit kita.
  6. Keylogger adalah sebuah program yang dapat memantau penekanan tombol pada keyboard, sehingga orang lain dapat mengetahui password dan informasi apapun yang kita ketik.
  7. Rootkit adalah program yang menyusup kedalam sistem komputer, bersembunyi dengan menyamar sebagai bagian dari sistem (misalnya menempel pada patch, keygen, crack dan game), kemudian mengambil alih, memantau kerja sistem yang disusupinya. Rootkit dapat mencuri data yang lalu-lalang di jaringan, melakukan keylogging, mencuri cookies akun bank dan lain-lain.
  8. Phishing adalah suatu bentuk penipuan untuk memperoleh informasi pribadi seperti userID, password, ATM, kartu kredit dan sebagainya melalui e-mail atau website palsu yang tampak asli.
  9. Browser Hijacker adalah Browser hijacker mengarahkan browser yang seharusnya menampilkan situs yang sesuai dengan alamat yang dimasukkan ke situs lain.Itu contoh paling parah dari gangguan yang disebabkan oleh browser hijacker. Contoh lain yang bisa dilakukan oleh pembajak ini adalah menambahkan bookmark, mengganti home page, serta mengubah pengaturan browser.
  10. Backdoor adalah Backdoor merupakan metode yang di gunakan untuk melewati autentifikasi normal (login) dan berusaha tidak terdeteksi. Backdoor sendiri sering kali disusupkan melalui trojan dan worm.
  11. Botnet adalah suatu jaringan memasukkan robot-robot perangkat lunak, atau bots, yang dijalankan secara otonomi dan secara otomatis. Mereka bekeja sebagai Zombie yang disusupkan pada jaringan komputer menggunakan perangkat lunak yang bisa dijalankan dimonitor dan diperintahkan bereaksi
    oleh pembuatnya (Master refer). Botnet merupakan kegiatan menyusupkan program-program tertentu kepada server-server komputer dimana  program-program tersebut biasanya disusupkan sebagai  worms, Trojan horse, atau backdoors, di bawah  perintah Master Refer dan dikendalikan dengan sebuah remote,Sehingga program tersebut dapat bekerja kapan saja sesuai keinginan si Master tadi yang tujuannya untuk mengganggu ataupun merusak suatu jaringan atau system operasi komputer (kejahatan) yang berpotensi melumpuhkan jaringan internet secara luas. Yang lebih mengerikan lagi sekarang ini botnet dapat digerakan dan dikendalikan oleh si Master dari tempat manapun dan kapanpun ia mau, jadi seperti zombie yang dipasang pada server-server yang ditanam melalui malware.Malware,berasal dari lakuran kata  malicious dan software yang artinya perangkat lunak yang diciptakan untuk menyusup atau merusak sistem komputer, peladen atau jejaring komputer tanpa izin termaklum (informed consent) dari pemilik.
  12. HIDS adalah sistem deteksi intrusi yang memonitor dan menganalisa internal dari sebuah sistem komputasi serta (dalam beberapa kasus) paket jaringan pada interface jaringan (seperti sistem deteksi intrusi berbasis jaringan (NIDS) akan dilakukan). [1] ini adalah jenis pertama dari software deteksi intrusi telah dirancang, dengan sistem target semula menjadi komputer mainframe di mana interaksi di luar jarang terjadi.

Socket Connection




1. Pengertian Socket
Socket adalah sebuah class yang disediakan oleh beberapa bahasa pemrograman.Socket adalah sebuah Class yang disediakan oleh beberapa bahasa pemrograman. Dengan socket, sebuah aplikasi di suatu komputer dapat Tentu saja aplikasi di komputer yang dihubungi menerima koneksi juga
menggunakan socket. Dengan kata lain socket adalah suatu Class yang digunakan oleh aplikasi untuk saling berhubungan. berikut ini menunjukkan bagaimana suatu aplikasi berhubungan dengan aplikasi lainnya.
Socket pertama kali diperkenalkan di sistem UnixBSD versi 4.2, pada tahun 1983, sebagai kelanjutan dari implementasi protocol TCP/IP yang muncul pertama kali pada sistem Unix BSD versi 4.1 pada akhir tahun 1981. Hampir setiap variant unix atau linux mengadopsi BSD Soket.
Untuk membangun aplikasi hal pertama yang perlu dilakukan adalah menganalisa jenis aplikasi kita, kebutuhan bandwidth, kebutuhan ketersampaian data dan sensitifitas terhadap delay. Berdasarkan hal ini kita bisa menentukan protokol apa yang kita gunakan, entah TCP atau UDP.
2.  Pemrograman Socket Menggunakan TCP
Cara kerja aplikasi yang menggunakan TCP dapat digambarkan oleh di bawah ini :
Detail dari proses tersebut adalah :
  1. Untuk bisa melakukan koneksi client server, program server harus berjalan terlebih dahulu
  2. Di sisi server disediakan sebuah socket, yang disebut welcoming socket yang fungsinya untuk mendeteksi adanya permintaan koneksi dari sisi client.
  3. Di sisi client terdapat client socket. Jika ingin menghubungi server, maka melalui client socket-nya, client membuat inisialisai koneksi ke welcoming socket milik server, dengan mode three-way handshake.
  4. Setelah welcoming socket menerima inisialisasi koneksi dari client socket, aplikasi server akan membuat connection socket di sisi server. Dengan connection socket ini, client socket dan connection socket berinteraksi satu sama lain untuk mengirim dan menerima data.
  5. Client membaca data yang dikirim oleh server dari client socket-nya. Kemudian menampilkan data tersebut di monitor.
3. Socket Pemrograman UDP
Contoh aplikasi untuk UDP socket berikut ini menggunakan kasus yang sama dengan kasus yang digunakan oleh TCP socket, yaitu :
  1. Client membaca inputan dari keyboard, kemudian mengirimkan hasilnya ke server melalui socket-nya.
  2. Server membaca data yang dikirim oleh client di connection socket
  3. Server mengubah data menjadi huruf besar
  4. Server mengirimkan data yang telah diubah menuju client melalui socket-nya.
  5. Client membaca data yang dikirim oleh server dari client socket-nya. Kemudian menampilkan data ke komputer. 

Praktek 1 - Program Sederhana Client Server Berbasis Java

  • Berikut adalah contoh sebuah pemogramaan sederhana client-server dengan berbasis java.

  • Source Code untuk Server :

  •        /*
  •  * To change this template, choose Tools | Templates
  •  * and open the template in the editor.
  •  */

  • package tugas_server;
  • import java.io.IOException;
  • import java.io.ObjectInputStream;
  • import java.io.ObjectOutputStream;
  • import java.net.ServerSocket;
  • import java.net.Socket;
  • import java.util.logging.Level;
  • import java.util.logging.Logger;
  • /**
  •  *
  •  * @author UNLA
  •  */
  • public class Tugas_Server {

  •     /**
  •      * @param args the command line arguments
  •      */
  •     public static void main(String[] args) {
  •         try {
  •             ServerSocket ss = new ServerSocket(5111);
  •             Socket s;
  •             String balasan;
  •             String balasan2;
  •             ObjectInputStream in = null;
  •             ObjectOutputStream out = null;
  •             s = ss.accept();
  •             out = new ObjectOutputStream(s.getOutputStream());
  •             out.flush();
  •             in = new ObjectInputStream(s.getInputStream());
  •             balasan = "";
  •             balasan2 = "";
  •             while (true) {
  •                 balasan = "";
  •                 balasan2 = "";
  •                 balasan = ReadMessage(in);
  •                 if (balasan.equals("exit")) break;
  •                 else {
  •                     if(balasan.equals("ini client"))
  •                     {
  •                     SendMessage("ini server, masukan username", out);
  •                     balasan2 = ReadMessage(in);
  •                     if (balasan2.equals("admin")){ SendMessage("Selamat Datang Admin", out);}
  •                     else {
  •                         if (balasan2.equals("user")){SendMessage("Selamat Datang User", out);}
  •                         else SendMessage("username tidak diketahui", out);
  •                         }
  •                     }
  •                     else
  •                     {
  •                         SendMessage("perintah tidak diketahui", out);
  •                 }
  •             }
  •             }
  •     in.close();
  •     out.close();
  •     s.close();
  •     ss.close();
  • }catch (IOException ex){
  •     Logger.getLogger(Tugas_Server.class.getName()).log(Level.SEVERE,null,ex);
  •     }
  •     }
  •  public static String ReadMessage(ObjectInputStream in)
  •  {
  •  String Reader="";
  •  try {
  •      Reader=(String)in.readObject();
  •  }catch (IOException ex){
  •      Logger.getLogger(Tugas_Server.class.getName()).log(Level.SEVERE,null,ex);
  •  }catch (ClassNotFoundException ex){
  •      Logger.getLogger(Tugas_Server.class.getName()).log(Level.SEVERE,null,ex);
  •  }
  •  System.out.println(Reader);
  •  return Reader;
  •  }
  •  public static void SendMessage(String word, ObjectOutputStream out)
  •  {
  •      try{
  •          out.writeObject(word);
  •          out.flush();
  •      }catch (IOException ex){
  •          Logger.getLogger(Tugas_Server.class.getName()).log(Level.SEVERE,null,ex);
  •      }
  •         // TODO code application logic here
  •     }

  • }

  • berikut tampilannya ketika di running :


Source Code untuk Client :
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package tugas_client;
import java.util.Scanner;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author UNLA
 */
public class Tugas_Client {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException{
        Socket s=new Socket("10.0.0.6", 5111);
        ObjectInputStream in=null;
        ObjectOutputStream out=null;
        Scanner scanf=new Scanner(System.in);
        String input="";
        String balasan;
        String balasan2;
        out=new ObjectOutputStream(s.getOutputStream());
        out.flush();
        in=new ObjectInputStream(s.getInputStream());
        balasan = "";
        balasan2="";
        while(true)
        {
            balasan="";
            balasan2="";
            input=scanf.nextLine();
            SendMessage(input, out);
            if(input.equals("exit"))break;
            else
            {
                balasan=ReadMessage(in);
                if(balasan.equals("ini server, masukkan username"))
                {
                    input=scanf.nextLine();
                    SendMessage(input, out);
                    balasan2=ReadMessage(in);

                }
            }
        }
        in.close();
        out.close();
        s.close();

        // TODO code application logic here
    }
public static void SendMessage(String word, ObjectOutputStream out)
{
    try{
        out.writeObject(word);
        out.flush();
    } catch (IOException ex){
        Logger.getLogger(Tugas_Client.class.getName()).log(Level.SEVERE, null, ex);
    }
}
public static String ReadMessage(ObjectInputStream in)
{
    String reader="";
    try{
        reader=(String) in.readObject();
    } catch (IOException ex){
        Logger.getLogger(Tugas_Client.class.getName()).log(Level.SEVERE, null, ex);
    } catch (ClassNotFoundException ex){
        Logger.getLogger(Tugas_Client.class.getName()).log(Level.SEVERE, null, ex);
    }
    System.out.println(reader);
    return reader;
}
}

berikut tampilannya ketika di running :


Pengertian Multiprocessing atau Multi threading


Multiprocessing merupakan penggunaan dua atau lebih CPU dalam sebuah sistem komputer. Multitasking merupakan metode untuk menjalankan lebih dari satu proses dimana terjadi pembagian sumberdaya seperti CPU. Multithreading adalah cara pengeksekusian yang mengizinkan beberapa thread terjadi dalam sebuah proses, saling berbagi sumber daya tetapi dapat dijalankan secara independen.


Keuntungan dari sistem yang menerapkan multithreading dapat kita kategorikan menjadi 4 bagian: 

1. Responsif. Aplikasi interaktif menjadi tetap responsif meskipun sebagian dari program sedang diblok atau melakukan operasi lain yang panjang. Umpamanya, sebuah thread dari web browser dapat melayani permintaan pengguna sementara thread yang lain berusaha menampilkan gambar.

2. Berbagi sumber daya. Beberapa thread yang melakukan proses yang sama akan berbagi sumber daya. Keuntungannya adalah mengizinkan sebuah aplikasi untuk mempunyai beberapa thread yang berbeda dalam lokasi memori yang sama.

3. Ekonomis. Pembuatan sebuah proses memerlukan pengalokasian memori dan sumber daya. Alternatifnya adalah dengan menggunakan thread, karena thread membagi memori dan sumber daya yang dimilikinya sehingga lebih ekonomis untuk membuat thread dan context switching thread. Akan susah mengukur perbedaan waktu antara thread dan switch, tetapi secara umum pembuatan dan pengaturan proses akan memakan waktu lebih lama dibandingkan dengan thread. Pada Solaris, pembuatan proses memakan waktu 30 kali lebih lama dibandingkan pembuatan thread sedangkan proses context switch 5 kali lebih lama dibandingkan context switching thread.

4. Utilisasi arsitektur multiprosesor. Keuntungan dari multithreading dapat sangat meningkat pada arsitektur multiprosesor, dimana setiap thread dapat berjalan secara paralel di atas procesor yang berbeda. Pada arsitektur processor tunggal, CPU menjalankan setiap thread secara bergantian tetapi hal ini berlangsung sangat cepat sehingga menciptakan ilusi paralel, tetapi pada kenyataanya hanya satu thread yang dijalankan CPU pada satu-satuan waktu.

Model MultiThreading

Beberapa terminologi yang akan dibahas: 

1. Thread pengguna: Thread yang pengaturannya dilakukan oleh pustaka thread pada tingkatan pengguna. Karena pustaka yang menyediakan fasilitas untuk pembuatan dan penjadwalan thread, thread pengguna cepat dibuat dan dikendalikan.

2. Thread Kernel: Thread yang didukung langsung oleh kernel. Pembuatan, penjadwalan dan manajemen thread dilakukan oleh kernel pada kernel space. Karena dilakukan oleh sistem operasi, proses pembuatannya akan lebih lambat jika dibandingkan dengan thread pengguna.

Model-Model MultiThreading: 

1. Model Many-to-One. Model ini memetakan beberapa thread tingkatan pengguna ke sebuah thread. tingkatan kernel. Pengaturan thread dilakukan dalam ruang pengguna sehingga efisien. Hanya satu thread pengguna yang dapat mengakses thread kernel pada satu saat. Jadi Multiple thread tidak dapat berjalan secara paralel pada multiprosesor. Contoh: Solaris Green Threads dan GNU Portable Threads.

2. Model One-to-One. Model ini memetakan setiap thread tingkatan pengguna ke setiap thread. Ia menyediakan lebih banyak concurrency dibandingkan model Many-to-One. Keuntungannya sama dengan keuntungan thread kernel. Kelemahan model ini ialah setiap pembuatan thread pengguna memerlukan tambahan thread kernel. Karena itu, jika mengimplementasikan sistem ini maka akan menurunkan kinerja dari sebuah aplikasi sehingga biasanya jumlah thread dibatasi dalam sistem. Contoh: Windows NT/XP/2000 , Linux, Solaris 9.

3. Model Many-to-Many. Model ini memultipleks banyak thread tingkatan pengguna ke thread kernel yang jumlahnya sedikit atau sama dengan tingkatan pengguna. Model ini mengizinkan developer membuat thread sebanyak yang ia mau tetapi concurrency tidak dapat diperoleh karena hanya satu thread yang dapat dijadwalkan oleh kernel pada suatu waktu. Keuntungan dari sistem ini ialah kernel thread yang bersangkutan dapat berjalan secara paralel pada multiprosessor.

Kesimpulan

Thread adalah alur kontrol dari suatu proses.

Keuntungan menggunakan Multithreading: 
1. Meningkatkan respon dari pengguna.
2. Pembagian sumber daya.
3. Ekonomis.
4. Mengambil keuntungan dari arsitektur multiprosessor.

Tiga model Multithreading: 
1. Model Many-to-One.
2. Model One-to-One.
3. Model Many-to-Many.

Pembatalan Thread: Tugas untuk membatalkan Thread sebelum menyelesaikan tugasnya.

Pembatalan Thread terdiri dari 2 jenis: 
1. Asynchronous cancellation.
2. Deffered cancellation.

Thread Pools menciptakan sejumlah Thread yang ditempatkan di dalam pool dimana Thread menunggu untuk dipanggil.

Thread Schedulling ada 2 macam: 
1. Local Schedulling.
2. Global Schedulling.

Istilah thread di Linux adalah task.
Pembuatan Thread di Linux menggunakan System call clone().

Mirip seperti sistem operasi desktop, Symbian OS mampu melakukan operasi secara multithreading, multitasking dan pengamanan terhadap memori. Dan semua pemrograman pada Symbian dilakukan secara event-based, artinya hardware CPU menjadi tidak aktif ketika tidak ada inputan berupa aktivitas tertentu. Namun perlu dipahami sistem operasi ini memang ditujukan untuk diinstal pada peralatan mobile dengan keterbatasan sumber daya. Multithread dan multitasking memberikan kemampuan Symbian OS untuk menjalankan lebih dari satu aplikasi sekaligus. Namun khusus ini, adanya preemptive multitasking kernel akan memberi tiap-tiap program suatu pembagian waktu pemprosesan yang dilakukan bergantian dengan cepat sehingga nampak bagi pemakai seolah-olah proses ini dieksekusi secara bersamaan. Untuk itu telah didefinisikan penjadwalan berdasar prioritas tertentu untuk menentukan proses mana yang berjalan terlebih dahulu dan proses apa berikutnya serta berapa banyak waktu akan jadi diberi.