forensik artefak dari mapped/mounted drives di Windows 7

Post ini lahir dari frustasi saat penugasan gw beberapa hari lalu. PC target terlihat sangat bersih dari data, dan saat melihat beberapa aktifitas terakhir dari user pada PC tersebut, terlihat bahwa user sebelumnya pernah me-mount beberapa network drive. Tentu saja hasil yang terlihat tidak lengkap, dan malah membuat penasaran. Pertanyaan yang muncul pertama adalah apakah user pernah me-mount network drive lain.

Beberapa registry key yang patut dilihat untuk mengetahui apakah user pernah me-mount drive lain adalah:

1. Map Network Drive MRU
Software\Microsoft\Windows\CurrentVersion\Explorer\Map Network Drive MRU

2. MountPoints2
Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2

3. RunMru
Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU

Hal lain yang perlu juga menjadi perhatian adalah kapan registry-registry key tersebut terakhir ditulis (dalam kasus gw ‘dibersihkan’). Tentu saja sebuah script batch atau program kecil untuk mengekstraksi dan me-parse registry key di atas dapat sangat membantu di lapangan.

web scrapping lycamobile.ie

Lycamobile adalah salah satu provider selular di Eropa.  Harga yang ditawarkan lycamobile cukup yahud, tapi seperti semua barang murah lainnya, lycamobile punya segudang kekurangan. Jaringan yang hanya 3G, sampai coverage yang tidak se-canggih vodafone.

Salah satu kekurangan lycamobile yang bikin geregetan adalah, si provider kadang suka ‘lupa’ memberitahu kalau paket sudah hampir habis, terutama paket gratisan yang di-dapat setelah isi ulang (Ya! isi ulang juga dapat gratisan, 2Gb selama sebulan, canggih kan!). Lycamobile juga tidak punya aplikasi untuk memantau berapa sisa paket data gratisan kita, satu-satunya cara adalah login ke website lycamobile untuk melihat sisa paket data kita. Ini yang seringkali terlupa, sehingga akhirnya si provider memakai saldo uang kita untuk akses data.

Web scrapping, sederhananya adalah cara meng-ekstrak data ‘tidak terstruktur’ dari website. Contohnya, ingin tahu berapa banyak berita di sebuah website yang membahas tentang politik? dengan web scrapping kita bisa mendownload semua artikel dalam bentuk yang terstruktur untuk kemudian di analisis.

Ceritanya dengan web scrapping kita akan login ke website lycamobile, untuk mengecek saldonya, dan memberi tahu kalau saldonya kurang dari jumlah tertentu (atau periode gratisan hampir habis).

Library yang digunakan

Python punya banyak library untuk melakukan suatu fungsi. Untuk yang satu ini saya menggunakan beautifulsoup, karena setelah coba library lain, lebih banyak errornya dari kode yang ditulis 🙄 Selain itu kita juga perlu library pendukung lainnya.

import requests
from bs4 import BeautifulSoup
import re

Setelah memastikan bahwa semua library itu ada, kita bisa pindah ke langkah selanjutnya.

Login

Untuk mendownload halaman yang memuat saldo paket data, kita terlebih dahulu harus melakukan login ke website lycamobile, halaman loginnya bisa dipantau di:

https://account.lycamobile.ie/login.aspx?lang=en

Selain itu kita juga perlu tahu field apa saja yang digunakan untuk login. Right-click, inspect di field username/password, setelah itu kita bisa kira-kira field mana saja yang digunakan untuk melakukan login.

<input id="ctl00_cphPro_txtMobileNumber" class="frm-txtbox" tabindex="1" autocomplete="off" maxlength="10" name="ctl00$cphPro$txtMobileNumber" type="text" placeholder="(ex:089-9XXXXXX)" />

<input id="ctl00_cphPro_txtPassword" class="frm-txtbox" tabindex="2" autocomplete="off" maxlength="15" name="ctl00$cphPro$txtPassword" type="password" />

Kita bisa lihat ada dua field yang dipakai untuk login, namanya “ctl00$cphPro$txtMobileNumber” dan “ctl00$cphPro$txtPassword”. Dua field ini akan kita digunakan oleh script kita untuk login:

url = 'https://account.lycamobile.ie/Login.aspx?lang=EN'
url_g = 'https://account.lycamobile.ie/Account/AccountInfo.aspx?lang=en' 

body = {'ctl00$cphPro$txtMobileNumber' : 'mycellnumberofcourse',
          'ctl00$cphPro$txtPassword' : 'nowayjose',
          'ctl00$cphPro$btnLogin' : 'Log in',
          'ctl00$cphPro$txtMobileNumber_MDevice':'',
          'ctl00$cphPro$txtPassword_MDevice': ''}

Url yang pertama kita peroleh sebelumnya, sedangkan url yang kedua adalah halaman yang akan kita download setelah login, yaitu halaman yang mencantumkan sisa paket data kita. Bila diperhatikan, selain dua field yang disebutkan diatas, ada beberapa field tambahan lain, yang seharusnya tidak berpengaruh besar. Field lain ini bisa didapat dengan cara yang sama.

Selain dua field yang terlihat jelas tadi, biasanya sebuah website modern punya beberapa field tersembunyi. Biasanya untuk menyimpan CSRF token atau value lain yang sekiranya diperlukan. Untuk mendeteksi value lain yang tersembunyi, dan kemudian melakukan login, kita gunakan fungsi berikut

def login(body, url, url_g):
    """
    login to website using parameters
    """
    s = requests.Session()
    loginPage = s.get(url)
    soup = BeautifulSoup(loginPage.text, "lxml")
    hiddenInputs = soup.findAll(name = 'input', type = 'hidden')
    
    for hidden in hiddenInputs:
        try:
            name = hidden['name']
            value = hidden['value']    
        except KeyError:
            name = ''
            value = ''
        body[name] = value

    page = s.post(url, data = body)
    page = s.get(url_g)
    return page

Pertama-tama kita mendownload halaman loginnya, lalu dengan menggunakan beautiful soup kita bisa memisahkan element yang punya nama ‘input’ (name=’input’) dengan tipe tersembunyi (type=’hidden’). Beautiful soup mengembalikan sebuah list dengan elemen-elemen tersebut. Tinggal menambahkannya ke dalam list/dictionary body yang kita siapkan sebelumnya (body[name] = value).

Let the scrapping begin

Setelah fungsi login, kini kita beralih ke fungsi utama, mengambil data yang diperlukan dengan fungsi scrap dibawah

def scrap(tag, cls, val, type):
    """
    scrap data from page, using chosen tag, class, class value and type
    type availavle are number and date
    """
    page = login(body, url, url_g)
    soup = BeautifulSoup(page.content, 'html.parser')
    name_box = soup.find(tag, attrs={cls:val})
    name = name_box.text.strip() # strip() is used to remove starting and trailing
    if type == 'number':
        name = re.findall('\d+\.\d+', name)
        name = name
    elif type == 'date':
        name = re.findall('\d+\/\d+\/\d+', name)
        name = name[0]
    return name 

Fungsi scrap menerima empat parameter. ‘tag’, ‘cls’, dan ‘val’ digunakan untuk memisahkan tag html tertentu dan kemudian ‘type’ digunakan untuk membersihkan data yang sudah diambil. Fungsi scrap kemudian kita panggil dengan parameter yang diperlukan. Sebagai contoh, berikut potongan laman dan kode dari website lycamobile yang memuat sisa paket data dan periode akftif.

<tr class="tbl-data">
<td data-title="DATA">
1760.87MB
</td>
<td data-title="FREE DATA EXPIRY DATE">
01/05/2017
</td>
</tr>

kita bisa lihat tag, class dan value dari class yang digunakan, dan kemudian tinggal memanggil fungsi scrap dengan nilai-nilai tersebut.

period = scrap('td', 'data-title', 'FREE DATA EXPIRY DATE', 'date')
sisa = scrap('td','data-title', 'DATA', 'number')

Tinggal menjalankan script itu secara otomatis, misalnya dengan menggunakan cronjob dua minggu sekali, dan tiap kali sisa paket data/periode mendekati status kritis, kirimkan pemberitahuan. Saya sendiri menggunakan telegram untuk melakukan pemberitahuan.

*dicomot dari berbagai script

USBdeview timestamp

USBdeview adalah sebuah program yang mampu “menerjemahkan” catatan pada registry windows yang berkaitan dengan koneksi USB. Mudahnya begini, aplikasi ini bisa membuat anda mengetahui USB device apa saja yang pernah dikoneksikan, kapan device tersebut dikoneksikan dan banyak informasi lain.

Saya sendiri seringkali menggunakan USBdeview dalam proses akuisisi live system. Karena selain mudah digunakan, dengan USBdeview, kita bisa dengan cepat mengetahui informasi dari device target.Karena memang tidak dirancang sebagai sebuah perangkat forensik digital, terdapat beberapa hal yang perlu diketahui dalam menggunakan perangkat semacam ini. Selalu lakukan pengujian terlebih dahulu untuk meyakinkan bahwa perangkat dimaksud akan menghasilkan informasi yang “forensically sound“.

Salah satu kendala yang dimiliki oleh USBdeview adalah informasi yang ditampilkan terkait created date. Permasalahannya sendiri tidak terdapat pada usbdeview sendiri, namun cara windows mencatat informasi tersebut pada registry.

Creation date dicatat pada HKLM\System\CurrentControlSet\Enum\USB\VID&PID, menariknya, pada sistem operasi Windows 7, key tersebut hanya meng-update pada insertion USB  pertama setelah shutdown. Bila user melakukan hibernasi, maka USB device  baru dapat di pasang tanpa mengupdate key tersebut, sampai nanti ketika user melakukan reboot kembali.

 


sumber:
[1]Some Pitfalls of Interpreting Forensic Artifacts in Windows Registry
[2]Nirsoft’s USBdeview

C.H.I.P, The World’s First $9 Computer

Memesan secara beramai-ramai ketika si CHIP masih di kickstarter, dan akhirnya setelah menunggu selama hampir setengah tahun, CHIP tiba juga ke rumah saya.

Spesifikasi lengkapnya sendiri:
[1] 1GHz R8 Processor
[2] 512 RAM
[3] 4GB storage
[4] Built in wifi B/G/N
[5] Bluetooth

Kurang lebih sekuat handphone kelas menengah saat ini deh. Menariknya, si CHIP bisa langsung terkoneksi via putty/serial connection, sehingga seharusnya tidak perlu repot memasang monitor untuk setting awalnya, seperti raspberry pi versi awal dulu.

Versi yang saya pesan adalah versi paling dasar yang di negara asalnya berharga $9, kelengkapannya seperti yang terlihat di gambar saja. Sebuah batangan CHIP, dan koneksi video component untuk display.Diatasnya ada yang langsung dilengkapi dengan add on koneksi VGA dan HDMI, bahkan kelas paling mahal sudah dilengkapi keyboard dan layar sendiri.

Tertarik mencobanya? coba saja mulai cari di situs jual beli online, karena barang yang satu ini tidak akan masuk secara resmi ke Indonesia, jadi harus impor sendiri 🙂

tutorial Sleuthkit

The Sleuthkit for Beginner – originally posted on echo|zine issue #29 ( 1-4-14 )

—–| Pendahuluan

Tahapan kedua pada proses forensik digital adalah tahapan analisis, setelah sebelumnya didahului oleh tahap akuisisi data. Tulisan kali ini akan memberikan pengenalan singkat mengenai beberapa tool yang dapat digunakan untuk melakukan analisis forensik. Tool-tool yang digunakan adalah bagian dari the The Sleuth Kit (TSK), yang ditulis oleh Brian Carrier (yang juga merupakan penulis buku Filesystem Analysis yang sangat lengkap bila tertarik mempelajari tentang filesystem)

TSK sendiri terdapat pada repository dari banyak distro yang sudah cukup umum, sehingga tidak sulit menginstallnya. Selain itu terdapat pula autopsy yang merupakan antar-muka bagi TSK.

1.img_stat

tool bawaan dari TSK ini digunakan untuk mengetahui jenis image yang akan di proses, bila yang melakukan proses akuisisi data/image berbeda dengan yang melakukan analisis data, sehingga anda tidak mengetahui jenis image yang akan di proses.

######################################################
input:
jtingkir@laptop:~/FORENSIC/$ img_stat USB2_Kingstone.001
output:
IMAGE FILE INFORMATION
——————————————–
Image Type: raw
Size in bytes: 1572864000
######################################################

tool-tool TSK lain biasanya mampu mendeteksi sendiri jenis image yang akan diproses, namun alangkah baiknya bila jenis image juga diketahui oleh yang melakukan analisis. Pada contoh diatas jenis image adalah raw.

2.mmls
mmls adalah tool yang melakukan analisis pada tingkatan volume, dan digunakan untuk memperlihatkan layout dari sebuah volume (partisi-partisi yang berada didalamnya)

######################################################
input:
jtingkir@laptop:~/FORENSIC/$ mmls USB2_Kingstone.001
output:
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors
Slot Start End Length Description
00: Meta 0000000000 0000000000 0000000001 Primary Table (#0)
01: —– 0000000000 0000000062 0000000063 Unallocated
02: 00:00 0000000063 0003902975 0003902913 Win95 FAT32 (0x0B)
###################################################################

Pada contoh diatas, mmls digunakan tanpa menentukan jenis imagenya, dan mmls dapat mengenali secara otomatis jenis imagenya. output dari perintah mmls tadi memperlihatkan terdapat tiga partisi dengan awal-akhir sektor terlihat pada kolom kedua dan ketiga sedangkan, jenis partisi terlihat pada kolom terakhir. Partisi dengan jenis FAT32 terlihat dimulai pada offset 63 (sector 63) dari
seluruh image tersebut, hal ini penting untuk kita gunakan pada analisis selanjutnya.

3.fsstat
fsstat adalah tool yang melakukan analisis pada tingkatan file system, mirip seperti mmls, namun pada level yang berbeda. fsstat akan memperlihatkan layout dan detail lainya dari sebuah filesystem.

######################################################
input:
jtingkir@laptop:~/FORENSIC/$ fsstat –o 63 USB2_Kingstone.001
output:
FILE SYSTEM INFORMATION
——————————————–
File System Type: FAT32
OEM Name: MSDOS5.0
Volume ID: 0xf0e75840
Volume Label (Boot Sector): NO NAME
Volume Label (Root Directory):
File System Type Label: FAT32
Next Free Sector (FS Info): 7688
Free Sector Count (FS Info): 3895224

Sectors before file system: 63

File System Layout (in sectors)
Total Range: 0 – 3902912
Total Range in Image: 0 – 3071936
* Reserved: 0 – 31
** Boot Sector: 0
** FS Info Sector: 1
** Backup Boot Sector: 6
* FAT 0: 32 – 3835
* FAT 1: 3836 – 7639
* Data Area: 7640 – 3902912
** Cluster Area: 7640 – 3902911
*** Root Directory: 7640 – 7647
** Non-clustered: 3902912 – 3902912

METADATA INFORMATION
——————————————–
Range: 2 – 49028758
Root Directory: 2

CONTENT INFORMATION
——————————————–
Sector Size: 512
Cluster Size: 4096
Total Cluster Range: 2 – 486910

FAT CONTENTS (in sectors)
——————————————–
7640-7647 (8) -> EOF
7648-7687 (40) -> EOF
######################################################

beberapa informasi singkat yang dapat diperoleh adalah sektor dimana terletak FAT files, root directory, ukuran sector, ukuran cluster, dan cluster range. Pada contoh output diatas juga terlihat terdapat dua file yang masih dicatatat oleh FAT entries yaitu file yang dimulai pada sector 7640 (dengan ukuran 8 sector) dan file yang dimulai pada sector 7648 (dengan ukuran 8 sector).
Informasi-informasi ini nantinya digunakan saat melakukan recovery file.

4.fls
fls adalah tool yang melakukan analisis pada tingkatan file name layer, dan digunakan untuk melihat seluruh file yang ada dan sudah dihapus.

######################################################
jtingkir@laptop:~/FORENSIC/$ fls -o 63 -rp USB2_Kingstone.001 > file_list.txt
######################################################

perintah fls diatas akan membuat daftar dari seluruh file (dan folder) dari image USB2_Kingstone.001, hanya pada partisi FAT32 (offset 63 / -o 63) dan hasilnya dituliskan ke file_list.txt. Sedangkan opsi –rp artinya dilakukan secara recursive dan mendisplay fullpath dari tiap-tiap file (dan folder).

5.strings
######################################################
strings -t d USB2_Kingstone.001 > strings.txt
grep -i “foto” strings.txt | less
######################################################

perintah strings akan membuat daftar dari seluruh string yang terdapat pada image USB2_Kingstone.001 dan dituliskan ke dalam strings.txt. Setelah itu dapat dilakukan pencarian string yang dibutuhkan dengan perintah grep (opsi -i artinya case insensitive). perintah ini biasanya berguna bila pada image target terdapat catatan mengenai password/email yang dibutuhkan, karena output
perintah strings ini dapat dijadikan wordlist untuk bruteforce attack, menggunakan hydra atau perangkat lain nantinya.

6.timeline
######################################################
creating bodyfile: fls -r -m “/” -i raw -o 63 USB2_Kingstone.001 > bodyfile.txt
mactime -b bodyfile.txt > output_mactime.txt “add -z for timezone”
######################################################

perintah diatas adalah perintah yang digunakan untuk mendaftar seluruh file yang terdapat pada file image, dengan disertai mac-time nya (modified, accessed, created) sehingga bisa terlihat aktifitas file-nya. Namun memang hasilnya harus digunakan dengan hati-hati, karena berbagai OS menggunakan pencatatan mac-time yang agak berbeda, selain itu terdapat kemungkinan
perbedaan timezone.

membangun home server: installasi dan konfigurasi webmin

Selain menggunakan ssh, webmin bisa digunakan untuk melakukan administrasi pada box linux. Webmin sendiri menggunakan antar muka berbasis web, sehingga hanya memerlukan perambah maya (browser) biasa sebagai kliennya. Selain antarmuka yang ramah, webmin menyediakan berbagai macam pilihan kostumasi box linux, mulai dari apache, samba bahkan sampai user. Oleh karena berbagai kemudahan dan fitur itu webmin cocok digunakan untuk kostumasi sehari-hari, namun ada baiknya tetap mengerti ssh.

Berikut cara menginstall webmin pada ubuntu 12.04.

1. download program2 yang dibutuhkan webmin

sudo apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python

2.download webmin

wget http://prdownloads.sourceforge.net/webadmin/webmin_1.580_all.deb

3. install deb tadi dengan dpkg

sudo dpkg -i webmin_1.580_all.deb

4. login ke webmin di alamat http://ipserver:10000
login ke webmin

Tulisan ini adalah bagian dari tulisan berseri dengan judul membangun home server sendiri.

membangun home server: installasi dan konfigurasi ssh

Sebuah box linux belum lengkap tanpa ada akses ssh. Ssh adalah kependekan dari secure shell, dan sesuai dengan namanya kita bisa mengetahui bahwa ini adalah sebuah shell yang secure. Secara sederhana, fungsinya adalah anda bisa memasukan perintah dari jarak jauh, walaupun kemudian penggunaannya tidak hanya untuk memasukan perintah dari jauh (SFTP, SCP, port forwarding dsb).

cukup dengan teorinya, berikut installasi, konfigurasi ssh pada ubuntu 12.04.

1. installasi openssh server

sudo apt-get install openssh-server

2. ganti port? konfigurasi lain?

sudo vi /etc/ssh/sshd_config

baris yang perlu mendapat perhatian dari config daemon ssh adalah

Port 22

ganti dengan port lain untuk meningkatkan keamanan

ListenAddress 192.168.1.1

secara default sshd akan menunggu koneksi pada 0.0.0.0, artinya semua ip addressm bila dirasa perlu untuk meningkatkan kemanan, ganti baris ini.

3. setelah mengganti jangan lupa restart servicenya.

sudo /etc/init.d/ssh restart

atau

sudo service ssh restart

4. tes ssh anda dari mesin lain.

ssh username@alamatserver

atau

5. gunakan putty
pada ubuntu:

sudo apt-get install putty

pada windows: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
putty

Tulisan ini adalah bagian dari tulisan berseri dengan judul membangun home server sendiri.