Sitemap

Introduction to Data & Software Security

Keamanan Data & Perangkat Lunak — Chapter 1

Information Security

Press enter or click to view image in full size
Sumber : pexels.com

Menurut NIST (National Institute of Standards and Technology), informasi dan sistem informasi harus dilindungi dari akses yang tidak sah terhadap penggunaan, pengungkapan, gangguan, modifikasi untuk mempengaruhi integritas (integrity), kerahasiaan (confidentiality), dan ketersediaan (availability).

Tidak hanya 3 aspek CIA diatas, namun information security juga mencakup aspek authenticity, accountability, non-repudiation, dan reliability.

Bagaimana software system berinteraksi?

Press enter or click to view image in full size

Setiap kotak di atas menggambarkan komponen-komponen apa saja yang perlu dilindungi guna mengamankan software system.

Istilah Vulnerability, Threat, Attack, Control, dan Incident.

  • Vulnerability (kerentanan) adalah kelemahan dalam sebuah sistem.
  • Threat (ancaman) merupakan sesuatu yang belum terjadi, tapi akan terjadi dan dapat menyebabkan kerugian.
  • Attack (serangan) merupakan kegiatan mengeksploitasi vulnerability terhadap sistem.
  • Control (kontrol) digunakan sebagai tindakan perlindungan.
  • Incident (insiden) terjadi ketika data atau sistem dikompromikan akibat missing/failed control.

7 Konsep Security Beserta Contohnya.

Berikut sebuah ilustrasi dimana John pemilik toko komputer yang ingin memesan suku cadang melalui website Supplier PC.

  • Availability : Website Supplier PC harus bisa diakses 7 x 24 jam.
  • Authencity : John bisa mengautentikasi dirinya ke Supplier PC dengan login ke dalam sistem menggunakan akun yang dimiliki.
  • Confidentiality : Koneksi pada browser milik john dan web server Supplier PC harus diatur dengan terenkripsi misalnya menggunakan TSL/SSL.
  • Message / Data Integrity : Checksums dikirimkan sebagai bagian dari paket TCP/IP yang dipertukarkan.
  • Accountability : Supplier PC mencatat setiap log transaksi John.
  • Non-Repudiation : John tidak bisa menolak atau menyangkal jika dia telah membuat transaksi (pesanan)
  • Reliability : Sistem pemesanan akan menyimpan setiap pesanan john.

Apa Saja Ancaman dalam Information Security?

  1. Interception : Sebuah pesanan disadap (intercept) oleh penyerang (attacker)
  2. Interruption : Seorang penyerang memblokir/menghalangi akses terhadap sistem
  3. Modification : Seorang penyerang memodifikasi data pesanan milik John
  4. Fabrication : Seorang penyerang membuat data pesanan fiktif

Software Security

Istilah software security bukan membahas tentang keamanan pada jaringan, melainkan keamanan dari sisi “custom code” dalam menjalankan sebuah web app, library, sistem backend, server pada web dan application.

Press enter or click to view image in full size
Sumber : OWASP’s Ten Most Critical Web Application Security Vulnerabilities

Perlu diketahui bahwa application security sama pentingnya dengan network security, karena serangan yang terjadi di layer application tidak akan pernah bisa dideteksi atau dihentikan jika hanya melihat melalui layer network.

Studi Kasus : A Simple Web Server

Untuk mengilustrasikan seperti apa blunder yang akan terjadi jika dari awal kita tidak pernah merancang keamanan aplikasi web dengan baik, bayangkan kita membangun sebuah web server bahasa Java, program ini dibuat untuk menyajikan dokumen melalui HTTP.

Get Radinal Dwiki Novendra, S.T., M.T.’s stories in your inbox

Join Medium for free to get updates from this writer.

Contoh requirement dari simple web server :

  1. (HyperText Transfer Protocol) : Protokol komunikasi yang digunakan untuk terhubung ke server di Web.
  2. Fungsi utama program simple web server adalah membuat koneksi dengan web server dan mengirimkan file HTML ke browser klien atau file lain yang diperlukan oleh aplikasi HTTP.
  3. Alamat dari website memiliki awalan http://
  4. Seperti pada umumnya request HTTP dilakukan dengan perintah :
    Get / HTTP/1.0
  5. Ketika server menerima permintaan nama file “/” (yang artinya dokumen root di server web), maka server akan mencoba memuat index.html. Dan server akan memberikan respon :
    HTTP/1.0 200 OK
    Kemudian diikuti dengan isi konten dokumen yang ditampilkan.
  6. Berikut adalah contoh implementasi source code SimpleWebServer :
  • SimpleWebServer: main()
/* This method is called when the program is run from the command line. */

public static void main (String argv[]) throws Exception {
/* Create a SimpleWebServer object, and run it */
SimpleWebServer sws = new SimpleWebServer();
sws.run();
}
  • SimpleWebServer Object
public class SimpleWebServer{                            
/* Run the HTTP server on this TCP port. */
private static final intPORT = 8080;
/* The socket used to process incoming connectionsfrom web clients */
private static ServerSocketdServerSocket;

public SimpleWebServer() throws Exception {
dServerSocket= new ServerSocket(PORT);
}

public void run() throws Exception {
while (true) {
/* wait for a connection from a client */

Socket s = dServerSocket.accept();
/* then process the client's request */
processRequest(s);
}
}
  • SimpleWebServer : processRequest
/* Reads the HTTP request from the client, andresponds with the file the user requested ora HTTP error code. */
public void processRequest(Socket s) throws Exception {
/* used to read data from the client */
BufferedReaderbr = new BufferedReader(new InputStreamReader(s.getInputStream()));

/* used to write data to the client */
OutputStreamWriterosw = new OutputStreamWriter(s.getOutputStream());

/* read the HTTP request from the client */
String request = br.readLine();
String command = null;
String pathname = null;

/* parse the HTTP request */
StringTokenizer st = new StringTokenizer (request, " ");
command = st.nextToken();
pathname = st.nextToken();
if (command.equals("GET")) {
/* if the request is a GETtry to respond with the filethe user is requesting */
serveFile (osw,pathname);
} else {
/* if the request is a NOT a GET,return an error saying this server does not implement the requested command */
osw.write ("HTTP/1.0 501 Not Implemented\n\n");
}
/* close the connection to the client */
osw.close();
}
  • SimpleWebServer : serveFile
public void serveFile(OutputStreamWriterosw, String pathname) throws Exception {
FileReader fr=null;
int c=-1;
StringBuffer sb= new StringBuffer();
/* remove the initial slash at the beginningof the pathname in the request */
if (pathname.charAt(0)=='/')
pathname=pathname.substring(1);
/* if there was no filename specified by theclient, serve the "index.html" file */
if (pathname.equals(""))
pathname="index.html";

/* try to open file specified by pathname */
try {
fr= new FileReader(pathname);
c = fr.read();
} catch (Exception e) {
/* if the file is not found,return the appropriate HTTP response code */
osw.write("HTTP/1.0 404 Not Found\n\n");
return;
}

/* if the requested file can be successfully opened and read, then return an OK response code and send the contents of the file */
osw.write("HTTP/1.0 200 OK\n\n");
while (c != -1) {
sb.append((char)c);
c = fr.read();
}

osw.write(sb.toString());
}
}
}

Setelah melihat kode diatas, bisakah kamu temukan vulnerabilities apa pun pada program SimpleWebServer tersebut?

A. Denial of Service (DoS)

Kerentanan ini terjadi ketika penyerang membuat server menjadi tidak dapat diakses atau unavailable (ingat konsep security : availability). Tentu saja hal ini menimbulkan kerugian, bayangkan saja sebuah toko online yang websitenya tidak dapat diakses dan toko tersebut sudah pasti kehilangan pemasukan.

Hal ini juga dapat terjadi pada SimpleWebServer, apabila klien mengirimkan carriage return saat memasukkan pesan pertama, bukan pesan GET yang sesuai format. Maka pada saat kode ini dijalankan

/* read the HTTP request from the client */
String request = br.readLine();
String command = null;
String pathname = null;

/* parse the HTTP request */
StringTokenizerst= new StringTokenizer(request, " ");
command = st.nextToken();
pathname = st.nextToken();

Yang selanjutnya terjadi adalah :

  1. Web server mengalami crash
  2. Layanan untuk semua klien berikutnya ditolak sampai web server di-restart kembali

Bagaimana cara mengatasi DoS vulnerability tersebut?

  1. Web server harus segera memutuskan sambungan dari web client mana pun yang mengirimkan request HTTP tidak sesuai format.
  2. Programer harus menangani exception dengan sangat hati-hati terutama pada kasus request yang tidak sesuai format.
  3. Dari insiden yang terjadi kita mengetahui bahwa menangani eksepsi itu sangat penting, oleh karena refactor kode menjadi seperti berikut. Gunakan try catch misalnya, untuk menangani eksepsi.
/* read the HTTP request from the client */
String request = br.readLine();
String command = null;
String pathname = null;

try {
/* parse the HTTP request */
StringTokenizerst= new StringTokenizer(request, " ");
command = st.nextToken();
pathname = st.nextToken();
} catch (Exception e) {
osw.write(“HTTP/1.0 400 Bad Request\n\n”);
osw.close();
return;
}

B. Pelanggaran konsep confidentiality (kerahasiaan)

Contoh insiden yang mungkin terjadi adalah klien ternyata bisa membaca seluruh file diluar htdocs. Hal tersebut bisa terjadi jika klien mengirimkan pesan request seperti berikut :

GET . . /. ./. ./. ./etc/shadow HTTP/1.0

Bayangkan saja jika sampai hal itu terjadi, maka klien bisa menemukan file-file lain yang tidak seharusnya bisa mereka lihat, contohnya file yang memuat user credential, dll.

Bagaimana cara mengatasi confidentiality vulnerability tersebut?

Cukup dengan memvalidasi pathname, maka hal tersebut dapat diatasi.

Pelajaran Yang Dapat Diambil

  1. Exception handling sangat penting dalam merancang keamanan sejak awal.
  2. Tentukan privilege dengan bijak. Misalnya pada database web application, pastikan hanya memberikan akses setiap user sesuai dengan kebutuhan saja. Tidak memberikan akses penuh pada sembarang user, apalagi akses untuk merubah atau bahkan menghapus tabel di database.
  3. Yang tidak kalah penting dan banyak disepelekan, Jangan pernah mempercayai input dari pengguna. Kenapa? karena bisa saja pengguna memasukkan/meng-inject script atau query berbahaya yang dapat mempengaruhi salah satu atau bahkan 7 konsep security tersebut.

Seperti apa contoh script injection berbahaya tersebut? Akan kita bahas di tulisan selanjutnya dengan judul bahasan Kerentanan dan Ancaman dalam Pemrograman Web.

Sampai jumpa di tulisan berikutnya. Terima kasih 😊