Senin, 01 November 2010

ARRAY STRUCT, STACK AND POINTER

I. ARRAY and STRUCT

Definisi Array

Suatu array adalah sebuah struktur data yang terdiri atas banyak variabel dengan
tipe data sama, dimana masing-masing elemen variabel mempunyai nilai indeks.
Setiap elemen array mampu untuk menyimpan satu jenis data (yaitu variabel).

Array merupakan tipe data terstruktur yang dipakai untuk menyimpan sekumpulan item data yang mempunyai tipe data sejenis. Untuk mengakses item data tersebut, digunakan subscript sebagai penunjuk array.
Array merupakan struktur data yang statis, yaitu jumlah elemen yang ada harus ditentukan terlebih dahulu dan tak bisa di ubah saat program berjalan.
Di dalam C++ tidak ada tipe variabel untuk memasukkan sejumlah karakter string. Untuk itu digunakan array dari tipe char.


Cara Deklarasi Array 1 Dimensi :
[];
[]={, , , ..., };
contoh:
int x[10];
int z[2], y[10];
int a[3] = {3, 6, 1};



Definisi Struct
Definisi Struktur (struct) sendiri adalah kumpulan dari variabel yang dinyatakan dengan sebuah nama , dengan sifat setiap variabel dapat memiliki tipe yang berlainan.
Struct digunakan untuk mengelompokkan sejumlah data yang mempunyai tipe dan ukuran yang berbeda.
Dalam pemrograman C++, jika kita membuat suatu program yang memerlukan berbagai tipe data yang akan digunakan. Tentunya dengan nama variable yang banyak pula. Dalam program yang sederhana, jika kita manggunakan sedikit variable tentu tidak jadi masalah. Akan tetapi jika kita akan membuat sebuah program yang lebih kompleks, dengan berbagai macam nama dan tipe variable dalam pendeklarasianya. Dengan struct, kita bisa mengelompokkan berbagai nama dan tipe variable tersebut sesuai dengan kelompoknya. Hal ini tentunya bisa berguna untuk memudahkan dalam mengelompokkan sebuah variable. Sebagai contoh umum, ada terdapat berbagai nama variable : nama, npm, alamat, dll. Variabel – variable tersebut dapat kita kelompokkan menjadi satu dengan nama data_mahasiswa. Kemudian jika terdapat variable mata_kuliah, nilai, sks, kelas, dll dapat kita kelompokkan menjadi satu dengan nama krs. Itulah sebagian gambaran umum tentang struct.
Dalam mendeklarasikan struct, ada beberapa cara penulisan yang biasa digunakan.
Pertama :

struct nama_struct {
tipe_data_1 nama_var_1;
tipe_data_2 nama_var_2;
tipe_data_3 nama_var_3;
……
};

Yang kedua adalah dengan deklarasi menggunakan typedef.

typedef struct {
tipe_data_1 nama_var_1;
..
.
tipe_data_n nama_var_n;
} nama_struct;


Kemudian untuk mendeklarasikan sebuah variable dengan tipe data struct yang telah dibuat sebelumnya adalah :

struct tipe_struct nama_variabel;

Jika pendeklarasian struct sebelumnya menggunakan typedef, maka untuk mendeklarasikan sebuah variable dengan tipe data struct adalah :

tipe_struct nama_variabel;
Dan untuk mengakses sebuah struct adalah dengan menggunakan operator titik (.)
nama_var_struct . nama_var_elemen;


NESTED STRUCT

Di dalam sebuah struct dapat dimungkinkan terdapat sebuah struct lagi. Jadi hal ini dapat diartikan struct di dalam struct. Hampir mirip nested loop, yaitu for di dalam for.




II. STACK
Dalam ilmu komputer, stack atau tumpukan merupakan sebuah koleksi objek yang menggunakan prinsip LIFO (Last In First Out), yaitu data yang terakhr kali dimasukkan akan pertama kali keluar dari stack tersebut. Stack dapat diimplementasikan sebagai representasi berkait atau kontigu (dengan tabel fix).

DEFINISI STACK
Stack adalah suatu bentuk khusus dari linear list di mana operasi penyisipan dan penghapusan atas elemen-elemennya hanya dapat dilakukan pada satu sisi saja yang disebut sebagai “TOP”.
Misal diberikan Stack S sebagai berikut :
S = [ S1, S2, .........., ST ] maka TOP(S) = ST.
Untuk menunjukkan jumlah elemen suatu stack digunakan notasi NOEL. Dari stack di atas, maka NOEL(S) = T.


OPERASI DASAR PADA STACK
1. PUSH :
Operator ini berfungsi untuk menambahkan satu elemen ke dalam stack. Notasi yang digunakan adalah :
PUSH(E,S)
Artinya : menambahkan elemen E ke dalam stack S.
Elemen yang baru masuk ini akan menempati posisi TOP. Jadi : TOP(PUSH(E,S)) = E.
Akibat dari operasi ini jumlah elemen dalam stack akan bertambah, artinya NOEL(S) menjadi lebih besar atau stack menjadi tidak kosong (ISEMPTY(PUSH(E,S)) = false).


2. POP :

Operator ini berfungsi untuk mengeluarkan satu elemen dari dalam stack. Notasinya :

POP(S)

Elemen yang keluar dari dalam stack adalah elemen yang berada pada posisi TOP. Akibat dari operasi ini jumlah elemen stack akan berkurang atau NOEL(S) berkurang dan elemen pada posisi TOP akan berubah. Operator POP ini tidak dapat digunakan pada stack kosong, artinya :

POP(CREATE(S)) = error condition

Catatan : TOP(PUSH(E,S)) = E


III. POINTER

Pengertian Pointer
Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya variabel lain) di dalam memori. Contoh, jika sebuah variabel berisi alamat dari variabel lain, variabel pertama dikatakan menunjuk ke variabel kedua.

Operator Pointer :

Ada 2 operator pointer yang dikenal secara luas, yaitu “operator &” dan “operator *”.

1. Operator &

Operator & merupakan operator alamat. Pada saat pendeklarasian variable, user tidak diharuskan menentukan lokasi sesungguhnya pada memory, hal ini akan dilakukan secara otomatis oleh kompiler dan operating sysem pada saat run-time. Jika ingin mengetahui dimana suatu variable akan disimpan, dapat dilakukan dengan memberikan tanda ampersand (&) didepan variable , yang berarti "address of". Contoh :

ted = &andy;

Penulisan tersebut berarti akan memberikan variable ted alamat dari variable andy. Karena variabel andy diberi awalan karakter ampersand (&), maka yang menjadi pokok disini adalah alamat dalam memory, bukan isi variable. Misalkan andy diletakkan pada alamat 1776 kemudian dituliskan instruksi sbb :

andy = 25;
fred = andy;
ted = &andy;


2. Operator *

Operator * merupakan operator reference. Dengan menggunakan pointer, kita dapat mengakses nilai yang tersimpan secara langsung dengan memberikan awalan operator asterisk (*) pada identifier pointer, yang berarti "value pointed by". Contoh :

beth = *ted;

(dapat dikatakan:"beth sama dengan nilai yang ditunjuk oleh ted") beth = 25, karena ted dialamat 1776, dan nilai yang berada pada alamat 1776 adalah 25.



Ekspresi dibawah ini semuanya benar, perhatikan :

andy = 25;
&andy = 1776;
ted = 1776;
*ted = 25;

Ekspresi pertama merupakan assignation bahwa andy = 25;. Kedua, menggunakan operator alamat (address/derefence operator (&)), sehingga akan mengembalikan alamat dari variabel andy. Ketiga bernilai benar karena assignation untuk ted adalah ted = &andy;. Keempat menggunakan reference operator (*) yang berarti nilai yang ada pada alamat yang ditunjuk oleh ted, yaitu 25. Maka ekspresi dibawah ini pun akan bernilai benar :
*ted = andy;


Deklarasi Pointer

Seperti halnya variabel lain, variabel pointer juga harus dideklarasikan terlebih dahulu sebelum digunakan. Bentuk umum deklarasi pointer adalah :
Dimana Tipe_data merupakan tipe dari data yang ditunjuk, bukan tipe dari pointer-nya.

PASSWORD CRACKING

Password cracking adalah salah satu komponen utama dalam melakukan penilaian keamanan adalah akuisisi informasi account pengguna dan cracking dari sandi account. Eksploitasi password dan user account merupakan salah satu masalah terbesar dalam dunia keamanan jaringan. Kami akan menjelaskan betapa mudahnya menembus pertahanan sebuah jaringan, cara penyerang masuk, tool yang mereka gunakan dan cara mengatasinya.

Serangan pada sistem komputer sebuah organisasi atau perusahaan memiliki bentuk yang berbeda-beda, seperti spoofing, smurfing dan berbagai jenis serangan Denial of Service (DoS). Serangan ini dirancang guna melumpuhkan atau menginterupsi penggunaan sistem operasi anda. Makalah ini berhubungan dengan bentuk serangan yang paling banyak digunakan, yakni password cracking.

Password cracking merupakan istilah yang sering digunakan untuk menjelaskan pembobol jaringan, sistem atau sumber daya dengan atau tanpa menggunakan tool guna membongkar suatu sumber informasi yang dilindungi password. Pemikiran - pemikiran para penyerang dan mempelajari mengapa mereka ingin mengakses jaringan dan sistem kita.

• Penyerang (Attacker)

Bagaimana dan mengapa mereka menyerang hingga saat ini masih terjadi perdebatan mengenai definisi dari kata “hacker”. Seorang hacker diartikan sebagai seseorang yang memiliki ketertarikan yang mendalam terhadap teknologi komputer; tidak didefinisikan sebagai seseorang ingin melakukan kerusakan. Sedangkan istilah “Penyerang” biasanya digunakan untuk menggambarkan seorang “hacker” perusak. Istilah lain dari Penyerang adalah “black hat”. Para analis keamanan seringkali disebut sebagai “white hat” dan analisa white-hat merupakan hacking dengan tujuan pertahanan.
Motivasi para Penyerang sangat beragam. Beberapa hacker jahat adalah anak-anak SMA yang sering berada di depan komputer mereka dan mencari berbagai cara untuk mengeksploitasi sistem komputer. Para Penyerang lainnya adalah karyawan yang sakit hati dan berniat melakukan balas dendam pada suatu perusahaan. Dan masih ada serangan lainnya yang didorong oleh tantangan belaka dalam menembus sistem pertahanan komputer.


2.2 METODE SERANGAN

Password cracking tidak selalu berhubungan dengan tool yang rumit. Cara termudah adalah menemukan secarik kertas yang bertuliskan password yang diletakkan pada monitor atau disembunyikan dibawah keyboard. Teknik umum lainnya adalah yang dikenal sebagai “dumpster diving”, yang terkait dengan seorang Penyerang yang mengais keranjang sampah anda untuk menemukan sampah dokumen yang mungkin berisikan password.
Tentunya serangan lainnya terkait dengan tingkat yang lebih rumit. Berikut ini beberapa teknik umum yang digunakan dalam password cracking :

- Serangan Dictionary
Sebuah serangan dictionary merupakan cara tercepat dan terbaik dalam melumpuhkan mesin. Sebuah file dictionary (sebuah file teks yang berisi kamus password) diload pada aplikasi cracking (seperti L0phtCrack), yang dijalankan terhadap user account yang ditemukan oleh aplikasi tersebut. Karena sebagai besar password seringkali tergolong sederhana, menjalankan sebuah dictionary attack seringkali cukup membantu.

- Serangan Hybrid
Bentuk serangan lainnya yang terkenal adalah serangan “hybrid”. Sebuah serangan hybrid akan menambahkan angka atau simbol terhadap nama file untuk keberhasilan meng-crack password. Pola yang digunakan biasanya berbentuk: first month password is “cat”; second month password is “cat1”; third month password is “cat2”; dan seterusnya.



- Serangan Brute force
Bentuk serangan lainnya yang tergolong rumit adalah brute force, seringkali memakan waktu yang sangat lama, tergantung kompleksitas password tersebut terkadang perlu waktu seminggu guna menebak password. L0phtCrack seringkali digunakan untuk melakukan serangan brute force.

Berikutnya, kita akan melihat beberapa tool yang digunakan untuk membobol sistem.

Tools yang Sering Dipergunakan
Salah satu tool yang paling populer adalah L0phtCrack (sekarang disebut LC4). L0phtCrack merupakan sebuah tool yang memungkinkan seorang Penyerang merampas password yang dienkripsi Windows NT/2000 dan mengkonversi-nya kedalam plaintext. Password NT/2000 ada dalam hash kriptografi dan tidak dapat dibaca tanpa tool seperti L0phtCrack. Tool ini mencoba berbagai kemungkinan kombinasi alphanumerik untuk meng-crack password.
Tool lainnya yang sering digunakan adalah protocol analyzer (sering dikenal dengan network sniffer, atau Sniffer Pro atau Etherpeek), yang mampu menangkap setiap potongan data pada segmen jaringan untuk dilampirkan. Saat tool ini dijalankan dalam “promiscuous mode”, dia dapat melakukan “sniff” (mengendus) segala sesuatu disekitar segmen jaringan seperti login dan transfer data. Sebagaimana yang akan anda lihat nanti, hal ini dapat menyebabkan kerusakan serius pada keamanan jaringan yang memungkinkan seorang penyerang mendapatkan password dan data yang sensitif.
Mari kita lihat beberapa skenario dan menguji cara para Penyerang melancarkan serangan mereka dan bagaimana caranya menghentikan atau mencegah serangan tersebut. Pertama-tama kami akan menjelaskan dua skenario yang terkait dengan serangan internal (serangan yang berasal dari orang dalam suatu organisasi), dan kemudian membahas dua skenario yang berhubungan dengan serangan eksternal.

- Serangan Internal
Penyerang internal pada serangan yang paling sering terjadi karena para Penyerang memiliki akses langsung terhadap sistem organisasi. Skenario awal adalah melihat sebuah situasi dimana seorang karyawan yang sakit hati adalah seorang Penyerang. Penyerang tersebut, adalah seorang veteran administrator sistem, yang bertanggung-jawab pada sistem administrasi, manajemen dan perlindungan jaringan komputer.
Contoh : Karyawan yang sakit hati
Jane Smith adalah seorang veteran administrator sistem yang menjalankan tugas tekniknya tanpa cela, dikontrak oleh perusahaan anda untuk menjalankan backup tape sepanjang larut malam. Perusahaan anda, sebuah ISP (Internet Service Provider), memiliki pusat data yang sangat besar dengan lebih dari 4000 sistem yang kesemuanya diawasi oleh Pusat Operasional Jaringan. Jane bekerja dengan dua orang teknisi lainnya untuk mengawasi backup sepanjang malam dan mengganti tape sebelum shift pagi datang. Mereka semua bekerja terpisah satu sama lain, dan Jane dikontrak untuk bekerja pada Windows 2000 Server.
Jane telah bekerja selama 6 bulan dan menjadi seorang “rising star”. Dia datang lebih awal, pulang lebih lambat dan dia mengajukan permohonan untuk dipindahkan ke departemen lain dalam perusahaan tersebut. Satu masalah: tak satupun ada posisi lowong saat itu. Kemudian selama sebulan terakhir, anda (analis keamanan) telah memperhatikan bahwa terjadi suatu peningkatan tajam usaha login pada Cisco router dan UNIX Server. Jika Anda memiliki CiscoSecure ACS yang diimplementasikan agar anda bisa mengaudit berbagai usaha dan anda melihat bahwa semuanya terjadi pada jam 3 tengah malam.
Persangkaan anda muncul, tapi sebagai seorang analis keamanan, anda tidak dapat langsung menuduh tanpa disertai bukti kuat.
Seorang analis keamanan mulai melihat lebih cermat keadaan ini. Anda mencatat bahwa serangan tersebut berasal dari seseorang yang memiliki kemampuan tinggi dan bekerja pada shift-nya Jane, memang benar dia telah mengganti (merotasi) tape dan biasanya kerja lembur untuk belajar atau membaca sebelum terjadi pergantian tim. Jadi anda memutuskan untuk memperketat pengawasan terhadap Jane melalui manajer operasional malam. Setelah tiga minggu melakukan supervisi yang ketat, anda memutuskan agar serangan tersebut dihentikan. Anda benar. Jane terbukti berusaha melakukan login ke dalam Cisco router dan UNIX Server.
Seorang analis keamanan yang baik memerlukan tool auditing yang baik pula, contohnya seperti Tacacs+, untuk me-log serangan. Tacacs+ merupakan protokol yang sering digunakan oleh aplikasi seperti CiscoSecure ACS yang akan membuat otorisasi, akuntabilitas dan otentikasi. Jika anda memiliki otentikasi maka user yang mengakses sebuah sumber perlu diotentikasi kebenaran ijin-nya untuk mendapatkan akses. Apa yang terjadi saat anda di otorisasi dan di otentikasi? Anda harus memiliki akuntabilitas. Accounting log sendiri mengatasi berbagai masalah password cracking dengan menghadapkan seorang Penyerang harus memiliki akuntabilitas, otentikasi dan otorisasi.

- Serangan Eksternal
Penyerang eksternal adalah mereka yang harus melintasi “tembok pertahanan” guna mencoba dan melumpuhkan sistem anda. Mereka tidak memiliki kemudahan akses sebagaimana penyerang internal. Skenario pertama menyangkut bentuk umum sebenarnya dari serangan eksternal adalah deface website. Serangan ini menggunakan password cracking untuk membobol sistem yang ingin di deface.
Kemungkinan lain dari password cracking adalah saat penyerang mencoba mendapatkan password melalui Social Engineering. Social Engineering merupakan trik mengelabui administrator yang tidak bersalah agar memberikan account ID dan passwordnya kepada penyerang. Mari kita lihat contoh berikut ini:
Contoh : Web site yang terdeface
Perlu sedikit usaha dan biasanya disertai dengan mengeksploitasi Internet Information Server (IIS) yang ketentuan permisi-nya tidak benar. Penyerang ini tinggal menggunakan workstation dan mencoba menyerang IIS server dengan sebuah tool editor HTML. Saat berada di Internet hingga ke situs, penyerang menggunakan tool password generator seperti L0phtCrack, yang menjalankan serangan brute force terhadap server tersebut.

3. KESIMPULAN

Dalam hal ini kami telah menjelaskan aspek psikologis dibalik motivasi Penyerang dan beberapa metode tingkat rendah maupun tingkat tinggi dalam mengcrack password. Diatas telah terlihat beberapa skenario serangan, termasuk serangan terhadap sebagian besar perusahaan yang dilakukan oleh administrator veteran, seorang pegawai teknisi dan pengacau dari luar