-
Notifications
You must be signed in to change notification settings - Fork 9
/
web.tex
216 lines (183 loc) · 11.2 KB
/
web.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
\chapter{Keamanan Sistem Web}
World Wide Web (WWW, atau sering disingkat menjadi Web saja) merupakan aplikasi
yang dominan pada saat ini. Kepopulerannya setara dengan aplikasi email. Boleh
jadi kalau dilihat dari jumlah data yang dikirimkan melalui web atau melalui
email, maka jumlah data yang dikirim melalui web lebih besar.
Bahasan mengenai masalah keamanan sistem web sesungguhnya dapat menjadi sebuah
buku yang tersendiri. Bab ini akan membahas secara singkat masalah-masalah
tersebut.
\section{Sejarah Web}
WWW pada awalnya dikembangkan oleh Tim Berners-Lee ketika dia bekerja di CERN,
sebuah tempat penelitian terkait dengan Fisika di Swiss di akhir tahun 1980-an
(sekitar tahun 1989)~\footnote{Saya mengikuti perkembangan sejarah Web ini
karena secara tidak sengaja saya mengikutinya sejak awal. Ceritanya pada akhir
tahun 80-an tersebut saya bekerja di kampus University of Manitoba dan
``terpaksa'' menggunakan komputer NeXT. Komputer NeXT ini adalah produk yang
dikembangkan oleh Steve Jobs setelah dia ditendang dari Apple. Komputer NeXT
ini sangat langka karena termasuk mahal. Pada waktu itu tidak banyak yang mau
pakai karena softwarenya juga terbatas. Saya sedang mencari-cari software apa
saja yang tersedia dan siapa saja yang pakai ketika melihat Tim Berners-Lee
sedang mengembangkan WWW dengan menggunakan komputer NeXT-nya. Jadi kebetulan
saya termasuk yang ikut ngoprek WWW pada awal-awalnya.}.
CERN merupakan tempat berkumpulnya peneliti-peneliti yang berasal dari berbagai
tempat di seluruh dunia. Komputer dan software yang digunakan para peneliti
tersebut tentunya berbeda-beda. Demikian pula dokumen yang dihasilkannya
diletakkan pada komputer yang tersebar.
Pada saat itu protokol untuk distribusi informasi yang paling banyak digunakan
adalah FTP dan Gopher. Keduanya cukup baik untuk mengelola atau
mendistribusikan data (informasi) dalam sebuah direktori, misalnya. Namun orang
masih harus mencari dimana letak direktori tersebut (di komputer mana dan dalam
direktori mana). Proses ini membuat distribusi informasi tidak terlalu nyaman.
WWW terdiri dari dua komponen utama, yaitu standar format dokumen yang
disebut HTML (HyperText Markup Language) dan protokol HTTP (HyperText Transfer
Protocol). Keduanya dikembangkan oleh Tim Berners-Lee~\cite{webbook}.
Pada awalnya WWW tidak terlalu terkenal karena softwarenya terbatas. Pada suatu
saat ada mahasiswa kerja praktek di NCSA yang diminta untuk mengembangkan
browser untuk tiga platform; UNIX, Windows, dan Mac. Mahasiswa-mahasiswa
tersebut akhirnya mengembangkan browser yang diberi nama Mosaic. Setelah
tersedia di ketiga platform tersebut, maka WWW mulai banyak pengguna. Maka
mulai populerlah dia. Salah satu mahasiswa tersebut bernama Marc Andreessen,
yang kemudian akhirnya menjadi salah satu pengembang dari browser Netscape yang
nantinya juga menjadi cikal bakal dari Mozilla.
HTML merupakan sebuah standar yang dikembangkan dari SGML, Standard Generalized
Markup Language. Sebenarnya HTML merupakan versi lebih sederhana dari SGML.
Justru inti utama dari HTML (dan HTTP) adalah di kesederhanaannya. Itulah
salah satu alasan mengapa Web menjadi sangat populer. Sebelumnya sudah ada
berbagai inisiatif untuk membangun sistem {\em hypertext}, tetapi gagal.
HTTP merupakan sebuah protokol untuk mendistribusikan data. Protokol HTTP
didesain dengan sifat {\em connectionless} - lagi-lagi - agar
sederhana~\cite{RFC2068}. Protokol ini kemudian berkembang sesuai dengan
kebutuhan dan kemajuan jaman. Sebagai contoh, nantinya akan ada protokol HTTPS
dan seterusnya. Bahasan mengenai kemananan akan banyak terkait dengan protokol
HTTP (dan turunannya) ini.
Salah satu alasan mengapa Web menjadi populer saat ini adalah karena dia
memudahkan dalam operasional karena sifatnya yang
tersentralisasi~\footnote{Dalam perkembangan teknologi selalu ada ayunan
(swing) dari tersentralisasi dan terdistribusi. Pada jaman {\em mainframe},
sistem komputer tersentralisasi. Mainframe merupakan pusat dan pengguna
menggunakan (green) terminal untuk mengakses mainframe secara bergantian.
Teknologi kemudian berubah menjadi terdistribusi dengan adanya sistem {\em
client server}. Di kantor-kantor cabang ada server lokal yang terhubung ke
kantor pusat secara terjadwal. Teknologi web kembali menjadi tersentralisasi.}.
Salah satu masalah dalam sistem {\em client server} adalah ketika terjadi
update software. Sangat repot untuk melakukan update di sisi {\em client}.
(Apalagi bagi instansi yang mempunyai banyak kantor cabang.) Sementara itu
dengan menggunakan web, update hanya perlu dilakukan di server web saja.
Dalam sistem web, klien hanya perlu memasang (web) browser. Web browser ini
juga tadinya hanya dapat memperagakan web secara sederhana. Perkembangan
teknologi kemudian memperkenankan penambahan fitur di browser dengan
menggunakan konsep {\em plugin}. {\em Interactivity} kemudian diberikan dengan
memasang (Adobe) Flash plugin. Namun ada kekhawatiran bahwa plugin-plugin ini
dapat menyebabkan sumber masalah keamanan.
\section{Topologi dan Asumsi}
Secara umum, sistem Web terdiri dari tiga hal:
\begin{itemize}
\item web server (Apache, IIS, Nginx, Tomcat);
\item web browser (Firefox, Chrome, Internet Explorerd (IE), Safari,
Edge, Lynx, Links, Opera, Vivaldi, Brave, Galeon, Kfm,
dan program seperti wget, curl);
\item jaringan (yang menghubungankan web server dan web browser).
\end{itemize}
Ada beberapa asumsi awal yang kita gunakan agar sistem Web berjalan
dengan aman. Asumsi-asumsi inilah yang dilanggar ketika terjadi masalah
keamanan\footnote{Jika diperhatikan dengan seksama, sebenarnya asumsi ini
terkait dengan aspek {\em confidentiality}, {\em integrity}, dan {\em
availability}}.
Asumsi terkait dengan web server adalah sebagai berikut.
\begin{enumerate}
\item Web (server) dimiliki oleh organisasi atau institusi yang benar dan
terkait dengan nama domain yang digunakan. Sebagai contoh, web dari BNI
dimiliki oleh Bank BNI.
\item Dokumen yang disajikan (diberikan) oleh web tidak mengandung malware
(virus, trojan horse, dan seterusnya).
\item Data catatan (logging) di server web tidak digunakan untuk keperluan yang
tidak semestinya. Sebagai contoh, data log tersebut tidak boleh
diperjual-belikan atau dipublikasikan secara umum.
\end{enumerate}
Asumsi terkait dengan klien yang menggunakan web browser adalah sebagai
berikut.
\begin{enumerate}
\item Identitas pengguna adalah benar dan pengguna memiliki itikad baik
dalam mengakses web server.
\item Pengguna hanya mengambil data dari direktori yang diperkenankan.
\item Pengguna memiliki itikad baik, tidak berniat merusak server web.
\end{enumerate}
Asumsi terkait dengan jaringan yang menghubungan web server dan web browser
adalah sebagai berikut.
\begin{enumerate}
\item Jaringan (dan komputer) bebas dari penyadapan, pengubahan, serangan
DoS ({\em Denial of Service}),
dan serangan-serangan lainnya. (Masalah terkait dengan jaringan akan menjadi
masalah {\em network security}, bukan masalah keamanan web.)
\end{enumerate}
Asumsi-asumsi di atas akan dilanggar oleh penyerang, yang mengakibatkan masalah
keamanan sistem web.
\section{Keamanan Server Web}
Server web menyediakan informasi secara statis dan dinamis melalui protokol
HTTP. Halaman statis diperoleh dengan perintah {\tt GET}. Halaman dinamis
diperoleh dengan berbagai cara:
\begin{itemize}
\item CGI (Common Gateway Interface) dengan menggunakan berbagai bahasa
pemrograman seperti shell script, PHP, Perl, Python, dan seterusnya;
\item Server Side Include (SSI);
\item Active Server Page (ASP);
\item Servlets.
\end{itemize}
\subsection{Confidentiality}
Data disimpan di server dalam bentuk berkas (dalam sebuah direktori) atau
menjadi bagian dari database. Salah satu bentuk serangan kepada server web
adalah dengan mencoba masuk ke server web tersebut (secara tidak sah).
Penyusupan ini dapat dilakukan melalui kelemahan (kerentanan) dari sistem
operasi yang digunakan oleh web server, kelemahan software web servernya
sendiri (server httpd), dan kelemahan dalam menggunakan password admin.
Sistem operasi (apapun sistem operasinya) memiliki kelemahan. Kadang kelemahan
ini cepat ditemukan, kadang dibutukan waktu tahunan (atau belasan tahunan)
untuk menemukan kelemahan tersebut. Ekspolitasi terhadap kelemahan ini membuat
penyerang dapat masuk ke sistem operasi. Ada yang masuk sebagai pengguna biasa
dan ada juga yang (akhirnya) berhasil masuk sebagai administrator (root, di
sistem UNIX). Jika penyerang sudah dapat masuk sebagai administrator, maka
selesai sudah ceritanya karena penyerang dapat melakukan apa saja.
Kadang, berhasil masuk menjadi {\em user} (pengguna) biasa juga sudah dapat
menimbulkan kekacauan. Sebagai contoh, ketika penyerang dapat masuk menjadi
pengguna yang memiliki hak akses untuk membaca berkas-berkas (data) yang
seharusnya tidak dibatasi aksesnya, maka data menjadi bocor. Sebagai contoh,
data tentang daftar gaji karyawan, data kesehatan, data pemilu, dan sejenisnya
jika bocor akan memiliki dampak yang berbeda-beda.
Bertambahnya fitur web, seperti menjalankan perintah atau {\em query} database
di server web, semakin menambah potensi lubang keamanan pula. Sistem operasi
server web sudah baik, tetapi server HTTP yang digunakan ternyata memiliki
kelemahan. Akibatnya juga sama, yaitu kebocoran data.
Protokol HTTP menggunakan data yang tidak terenkripsi ({\em plain text})
sehingga dapat disadap dengan mudah. Sebagai contoh, tcpdump (wireshark) dapat
digunakan untuk menyadap data HTTP.
\begin{verbatim}
# tcpdump port 80
\end{verbatim}
Hal yang sering juga terjadi adalah penggunaan password yang lemah di server
web. Sebagai contoh, ada banyak server yang menggunakan id {\em admin} dan
password {\em admin}. Sebagus apapun sistem operasi dan server http yang
digunakan, kelemahan dalam memilih password juga dapat berakibat kebocordan
data.
Salah satu cara untuk mengatasi kelemahan ini adalah dengan menggunakan
protokol HTTPS, dimana data dienkripsi. Penyadapan masih dapat dilakukan,
tetapi data yang disadap sudah dalam format terenkripsi.
\subsection{Integrity}
Jika seorang penyerang dapat masuk ke server web dan memiliki hak tulis, maka
dia dapat mengubah data yang ada di server. Pengubahan data di server boleh
jadi hanya mengubah tampilannya, sering disebut {\em web defacing}. Yang lebih
mengerikan adalah kalau penyerang dapat mengubah data tetapi tidak terlalu
terlihat oleh mata awam. Sebagai contoh, misalnya sebuah produk yang seharusnya
berharga satu juta rupiah dapat diubah menjadi satu rupiah saja.
Serangan terhadap integritas data dapat dilakukan secara kasar, seperti contoh
di atas, atau dilakukan secara halus dan tidak mudah terlihat. Sebagai contoh,
sebuah data nilai mahasiswa boleh jadi asalnya 70 (skala 100) dapat diubah
menjadi 79. Data ini bercampur dengan data nilai lainnya (dan siswa lainnya)
sehingga tidak terlalu terlihat perubahannya. Serangan seperti ini sulit untuk
dideteksi.
\subsection{Availability}
Serangan terhadap aspek {\em availability} dari layanan web dapat dilakukan
dengan berbagai cara. Tujuan dari serangan ini adalah meniadakan layanan,
sehingga disebut serangan {\em Denial of Service} (DOS).
Serangan yang paling primitif terhadal layanan web adalah dengan melakukan {\em
request} secara berulang-ulang atau bertubi-tubi. Jika perilaku ini dilakukan
oleh banyak orang (banyak mesin) maka akibatnya dapat menjadi fatal.