Powered by Blogger.

Bảo mật Web với qua Mode Security - Bài 01_ Các kỹ thuật tấn công Web hiện nay CÁC KỸ THUẬT TẤN CÔNG WEB PHỔ BIẾN HIỆN NAY 1.1.1 Cross-SiteScripting(XSS) Cross-SiteScriptinghaycònđượcgọitắtlàXSS(thayvìgọitắtlàCSS đểtránhnhầmlẫnvớiCSS–CascadingStyleSheetcủaHTML)làmộtkỹ thuậttấncôngbằngcáchchènvàocácWebsiteđộng(ASP,PHP,CGI,JSP) nhữngthẻHTMLhaynhữngđoạnmãnguyhiểmcóthểgâyranguyhạicho nhữngUserkhác. Trongđónhữngđoạnmãnguyhiểmđượcchènvàohầuhếtđượcviếtnhư Client-SiteScriptbằngJavascript,Jscript,DHTMLvàcũngcóthểlàcácthẻ HTML.Kỹthuậttấncôngnàyđãnhanhchóngtrởthànhmộttrongnhữnglỗi phổbiếncủaWebApplicationvàmốiđedọacủachúngđốivớingườisử dụng ngàycànglớn.KhảnăngcủaXSSlàđánhcắpSessionCookietừUser bênngoàiInternet,khácvớicácchươngtrìnhSniffcácSessionCookiephổ biếnhiệnnaylàchỉsniffđượccácSession CookietừnhữngUser trong InternalNetwork. Hình 1.1 Kỹ thuật tấn công Cross-SiteScripting(XSS) VềcơbảnXSSgiốngnhưSQLInjectionhaySourceInjectionmàsẽđược trìnhbàytrongcácphầnsau,nócũnglàcácrequestđượcgửitừcác máy clienttớiservernhằmchènvàođócácthôngtinvượtquátầmkiểmsoát củaserver.NóchophépHackerchèncácđoạnmãvàolinkcủađườngdẫn, đểthựchiệntrêntrìnhduyệtcủaUser,dẫnđếnviệcmấtcookies,mậtkhẩu, sessionhaychènvirus… ĐểkiểmtraWebsitecóbịmắclỗiXSS,cóthểdựavàocácđặcđiểmcủa XSScơbảnvàcácthànhphầnXSShtml. KhácvớicáclỗikháclàgâyhạitrựctiếplênhệthốngchứaWebsite,còn XSSlạikhônggâyhạiđếnhệthốngcủasevermàđốitượngtấncôngchủyếu củaXSSlạilàngườidùng.Lợi dụngnhượcđiểmnàyhackercóthểlàmnhiều việctrongđóthôngdụngnhấtđượcliệtkêtrongnhữngmụcdướiđây. · Lấycắpcookies:khihackerlấycắpđượccookiesngườidùngthìhacker cóthểsửdụngvàđiềukhiểnaccountcủangườidùngđó. · DùngXSSđểlừađảo:ngoàiviệclấycắpcookies,cáchackercòncóthể hướngtrìnhduyệtcủangườidùngđếntrangWebmàhackerthiếtkếsẵn đểthựchiệnlừađảo.Chẳnghạnnhưlừađảochiếmdụngtàikhoảnngân hàng,tàikhoảnEmail,mãtàikhoảnchứngkhoán… ĐánhcắpHistory:mụcđíchđánhcắphistoryđểhackertheodõithóiquen lướtWebcủangườidùng,đâylàkiểuthămdòtrướckhitấncôngcủacác hacker 1.1.2. Session hijacking Hình 1.3 Kỹ thuật tấn công SQL Injection Hầu hết các lỗi SQL Injection đều là do câu lệnh SQL sai hoặc do user làm cho câu lệnh SQL sai, nên nó sẽ không thực hiện đúng chức năng của nó. Ví dụ như có một script kiểm tra đăng nhập như sau: Mã lệnh (php) 0) { //Đăng nhập thành công } else {//Đăng nhập không đúng Username hay Password } ?> Đoạn Script trên là một đoạn Script rất đơn giản thực hiện Login thông qua câu SQL kiểm tra username và password . Câu lệnh SQL nguyên thủy là : SELECT * FROM users WHERE user = "$username" AND password = "$password" Tuy nhiên, đây lại là một SQL Injection vô cùng lớn nguy hiểm nếu như user nhập biến user là “or 1 or user=” khi đó SQL trên sẽ trở thành: SELECT * FROM users WHERE user = "" OR 1 OR user="" AND password = "$password" Kết quả trả về sẽ là toàn bộ user trong Database và dĩ nhiên đây là một trường hợp Login không hợp lệ (biến password cũng có thể sử dụng để tạo SQL Injection) . Thực ra, lỗi trên là do biến $username, có thể fix bằng cách kiểm tra biến user, rồi sau đó mới kiểm tra biến pass, hoặc một cách nhanh hơn, fix được hầu hết tất cả các lỗi SQL Injection mà chỉ cần sữ dụng một hàm có sẵn của PHP, đó là hàm addslashes. 1.1.4. Web Shell Shell là interface giữa user và kernel OS, người dùng (user) gõ lệnh vào, shell sẽ "đọc hiểu" & "truyền" lệnh này xuống kernel OS để thực hiện và ngược lại khi kernel xử lý xong sẽ send back lại cho user thông qua Shell. Mục đích của Shell là giúp chúng ta có thể thực hiện các thao tác dữ liệu trên server nhanh chóng và tiện ích (giao diện giữa người dùng và máy). Có một số thì lợi dụng chức năng của shell này để tấn công server, chẳng hạn như dạng tấn công phổ biến nhất là Local Attack. Chẳng hạn như shell R57 (và còn một số loại shell khác), con shell này tạo một giao diện và thông qua giao diện đó mình có thể biết được các tình trạng server (gần như một cách tổng quát về server). Đây là shell nổi tiếng được viết bằng PHP. Hình 1.4 Kỹ thuật tấn công Local Attack ( Web Shell) Để tác động vào Kernel, thực chất Web Shell sẽ dùng các shell script hay các lệnh của shell truyền vào mà thực thi. Kernel là chương trình nhân, chạy các chương trình và quản lý các thiết bị phần cứng hay đĩa và máy in. Shell script là tập hợp một nhóm lệnh và các code được đóng gói thành file .sh. khi ta chạy file .sh thì lệnh và code trong đó sẽ chạy theo những gì tạo ra nó thiết lập bên trong. Local Attack là khái niệm nói về các cuộc tấn công từ nội bộ bên trong, đây là 1 dạng tấn công 1 Website nào đó nhờ vào 1 Website khác, 2 Website này cùng chung 1 server. Đây là cách dễ dàng để tấn công vào cơ sở dữ liệu (database), thậm chí khống chế toàn bộ site/server nếu như server không được cấu hình bảo mật tốt. 1.1.5. HTTP Fingerprinting Chỉ có những hacker nghiệp dư mới thực hiện tấn công một server mà không biết server đó có hoạt động hay không. Phức tạp hơn, hacker sẽ thu thập càng nhiều thông tin càng tốt về kiến trúc mạng và phần mềm đang chạy trên server. Cụ thể với web server, phương thức tìm kiếm thông tin này gọi là HTTP Fingerprinting (dấu vân tay HTTP). Hình 1.5 Kỹ thuật tấn công HTTP Fingerprinting HTTP Fingerprinting hoạt động bằng cách kiểm tra các đặc tính riêng của web server bằng các response khi được thăm dò và lấy “dấu vân tay” của server từ những thông tin thu thập được. Sau đó dấu vân tay này được so sánh với một cơ sở dữ liệu về “dấu vân tay” cho các web server được biết đến để xác định tên web server và phiên bản mà nó đang chạy. 1.1.6. Null byte attacks Các Byte Tấn công Null là một kiểu tấn công lợi dụng việc xử lý không phù hợp của nhân vật Byte Null giữa các ngôn ngữ khác nhau. Các Byte Null là một byte đặc biệt cho biết kết thúc của một chuỗi ký tự. Trong C và C + + ngôn ngữ lập trình các nhân vật Byte Null báo hiệu sự kết thúc của chuỗi. Khi thông dịch viên gặp các nhân vật Byte Null, nó biết rằng nó đã đạt đến kết thúc của chuỗi. Trong ngôn ngữ mutlibyte như PHP, nhân vật Byte Null không có ý nghĩa đặc biệt. PHP xử lý nó như bất kỳ ký tự mã hóa khác và không coi đó là sự kết thúc của chuỗi. Các hành vi khác nhau trong việc xử lý nhân vật này làm cho các cuộc tấn công Byte Null có thể như chúng ta sẽ thấy dưới đây. Ví dụ: Xem xét một kịch bản cho phép người dùng tải về hình ảnh chỉ từ máy chủ. readfile ($ _GET ["hình ảnh"]. "jpg."); Kịch bản chấp nhận một tham số là tên hình ảnh mà không có một phần mở rộng. . Gắn thêm các lập trình viên jpg "mởrộng vào cuối tên hình ảnh để đảm bảo tập tin hình ảnh chỉ đang được tải về Một kẻ tấn công gửi các URL sau.: http://www.mysite.com/downloadimage.php?image=password.txt 00% Chú ý 00% vào cuối năm theo yêu cầu. Đây là mã hóa URL của byte null. Khi kịch bản PHP nhận được yêu cầu này, nó sẽ cố gắng để thực hiện lệnh sau: readfile ("Password.txt \ 0.jpg"); Các \ 0 cho biết Byte Null. Trong URL nó được biểu diễn như là 00% bởi vì nó được mã hóa URL nhưng các đại diện thực tế là \ 0. Sử dụng \ 0 trực tiếp trong URL sẽ không vượt qua được Byte chacacter Null. Nó phải được mã hóa đầu tiên. Chức năng readfile sẽ gửi tên tập tin gửi password.text \ 0.jpg một một chức năng C-ngôn ngữ mà sẽ trả lại hồ sơ. Chức năng C-ngôn ngữ sẽ thấy rằng có một nhân vật Byte Null và sẽ cho rằng các tập tin yêu cầu chỉ là Password.txt bởi vì nó sẽ bỏ qua tất cả mọi thứ sau khi các Byte Null. Những kẻ tấn công thực sự có thể lấy tại bất kỳ tập tin khác, ông muốn. 1.1.7. Blog Spam Thư rác (spam) đang bắt đầu tấn công các trang nhật ký trực tuyến, tin nhắn IM và điện thoại di động. Cuộc chiến chống spam vẫn là chuyện dài nhiều tập: ngay khi những công cụ chống spam tiên tiến được đưa ra thì những cách thức xảo trá mới lại mở ra một mặt trận khác. Thư rác dạng comment là một trong những hình thức mới và một hình thức khác nữa gọi là splog (viết tắt từ spam blog), blog tạo ra chỉ đơn thuần nhằm mục đích quảng cáo. Spammer thường tạo hàng tá, thậm chí là hàng trăm splog mà trên đó liên kết đến trang web của họ, qua đó giúp tăng vị trí trang web đó trong mục xếp hạng truy cập của Google và các trang web tìm kiếm khác. Một loại splog khác dụ người lướt web nhấn vào một quảng cáo mà liên kết đến những website có trả tiền splog này. Hình 1.7 Kỹ thuật tấn công Null byte attacks Tuy nhiên, đây là một hình thức tấn công cực kỳ nguy hiểm, có thể bị lợi dụng để phát tán các loại phần mềm độc hại. Trong khi đó, người dùng thường dễ tin tưởng khi nhận được một tin nhắn vì ý nghĩ chỉ có người quen với biết được ID dịch vụ tin nhắn tức thời của mình. 1.1.8. Directory traversal attack Directory Traversal là một khai thác HTTP cho phép kẻ tấn công để truy cập vào thư mục giới hạn và thực hiện các lệnh bên ngoài thư mục gốc của web server. Các máy chủ web cung cấp hai cấp độ chính của cơ chế bảo mật: · Access Control Lists (ACL) · Thư mục gốc Một danh sách điều khiển truy cập được sử dụng trong quá trình cấp phép. Đó là một danh sách mà quản trị viên máy chủ web sử dụng để chỉ ra người dùng hoặc nhóm có thể truy cập, sửa đổi hoặc thực hiện các tập tin cụ thể trên máy chủ, cũng như các quyền truy cập khác. Thư mục gốc là một thư mục cụ thể trên hệ thống tập tin máy chủ, trong đó người sử dụng bị hạn chế. Người sử dụng không thể truy cập bất cứ điều gì trên thư mục gốc này. Ví dụ: thư mục gốc mặc định của IIS trên Windows là C: \ Inetpub \ wwwroot và với thiết lập này, người dùng không có quyền truy cập vào C: \ Windows nhưng có quyền truy cập vào C: \ Inetpub \ wwwroot \ tin tức và bất kỳ thư mục khác và các tập tin trong thư mục gốc (với điều kiện là người dùng được xác thực thông qua các ACL). Thư mục gốc ngăn chặn người dùng truy cập vào các file nhạy cảm trên máy chủ như cmd.exe trên nền tảng Windows và các tập tin passwd trên Linux / Unix. Lỗ hổng này có thể tồn tại hoặc trong phần mềm máy chủ web riêng của mình hoặc trong mã ứng dụng web. Để thực hiện một cuộc tấn công theo cây thư mục, tất cả các nhu cầu của một kẻ tấn công là một trình duyệt web và một số kiến ​​thức về nơi một cách mù quáng tìm thấy bất kỳ tập tin mặc định và thư mục trên hệ thống.

Bảo mật Web với qua Mode Security - Bài 01_ Các kỹ thuật tấn công Web hiện nay

CÁC KỸ THUẬT TẤN CÔNG WEB PHỔ BIẾN HIỆN NAY

1.1.1 Cross-SiteScripting(XSS)

Cross-SiteScriptinghaycònđượcgọitắtlàXSS(thayvìgọitắtlàCSS đểtránhnhầmlẫnvớiCSS–CascadingStyleSheetcủaHTML)làmộtkỹ thuậttấncôngbằngcáchchènvàocácWebsiteđộng(ASP,PHP,CGI,JSP) nhữngthẻHTMLhaynhữngđoạnmãnguyhiểmcóthểgâyranguyhạicho nhữngUserkhác. Trongđónhữngđoạnmãnguyhiểmđượcchènvàohầuhếtđượcviếtnhư Client-SiteScriptbằngJavascript,Jscript,DHTMLvàcũngcóthểlàcácthẻ HTML.Kỹthuậttấncôngnàyđãnhanhchóngtrởthànhmộttrongnhữnglỗi phổbiếncủaWebApplicationvàmốiđedọacủachúngđốivớingườisử dụng  ngàycànglớn.KhảnăngcủaXSSlàđánhcắpSessionCookietừUser bênngoàiInternet,khácvớicácchươngtrìnhSniffcácSessionCookiephổ biếnhiệnnaylàchỉsniffđượccácSession CookietừnhữngUser  trong InternalNetwork.
Hình 1.1 Kỹ thuật tấn công Cross-SiteScripting(XSS)
VềcơbảnXSSgiốngnhưSQLInjectionhaySourceInjectionmàsẽđược trìnhbàytrongcácphầnsau,nócũnglàcácrequestđượcgửitừcác máy clienttớiservernhằmchènvàođócácthôngtinvượtquátầmkiểmsoát củaserver.NóchophépHackerchèncácđoạnmãvàolinkcủađườngdẫn, đểthựchiệntrêntrìnhduyệtcủaUser,dẫnđếnviệcmấtcookies,mậtkhẩu, sessionhaychènvirus…
ĐểkiểmtraWebsitecóbịmắclỗiXSS,cóthểdựavàocácđặcđiểmcủa XSScơbảnvàcácthànhphầnXSShtml.
KhácvớicáclỗikháclàgâyhạitrựctiếplênhệthốngchứaWebsite,còn XSSlạikhônggâyhạiđếnhệthốngcủasevermàđốitượngtấncôngchủyếu củaXSSlạilàngườidùng.Lợi dụngnhượcđiểmnàyhackercóthểlàmnhiều việctrongđóthôngdụngnhấtđượcliệtkêtrongnhữngmụcdướiđây.
·        Lấycắpcookies:khihackerlấycắpđượccookiesngườidùngthìhacker cóthểsửdụngvàđiềukhiểnaccountcủangườidùngđó.
·        DùngXSSđểlừađảo:ngoàiviệclấycắpcookies,cáchackercòncóthể hướngtrìnhduyệtcủangườidùngđếntrangWebmàhackerthiếtkếsẵn đểthựchiệnlừađảo.Chẳnghạnnhưlừađảochiếmdụngtàikhoảnngân hàng,tàikhoảnEmail,mãtàikhoảnchứngkhoán…
ĐánhcắpHistory:mụcđíchđánhcắphistoryđểhackertheodõithóiquen lướtWebcủangườidùng,đâylàkiểuthămdòtrướckhitấncôngcủacác hacker
1.1.2. Session hijacking
Hình 1.3 Kỹ thuật tấn công SQL Injection
Hầu hết các lỗi SQL Injection đều là do câu lệnh SQL sai hoặc do user làm cho câu lệnh SQL sai, nên nó sẽ không thực hiện đúng chức năng của nó. Ví dụ như có một script kiểm tra đăng nhập như sau:
Mã lệnh (php) <?
$username = $_POST['username']; //Lấy User và Pass từ Form
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM users WHERE user =
\"$username\" AND password = \"$password\"");
if (mysql_num_rows($result) > 0) {
//Đăng nhập thành công          }
else {//Đăng nhập không đúng Username hay Password
}
?>
Đoạn Script trên là một đoạn Script rất đơn giản thực hiện Login thông qua câu SQL kiểm tra username và password . Câu lệnh SQL nguyên thủy là :
SELECT  * FROM  users  WHERE  user  = "$username"  AND  password  = "$password"
Tuy nhiên, đây lại là một SQL Injection vô cùng lớn nguy hiểm nếu như user nhập biến user là “or 1 or user=” khi đó SQL trên sẽ trở thành:
SELECT * FROM users WHERE user = "" OR 1 OR user="" AND password = "$password"
Kết quả trả về sẽ là toàn bộ user trong Database và dĩ nhiên đây là một trường hợp Login không hợp lệ (biến password cũng có thể sử dụng để tạo SQL Injection) . Thực ra, lỗi trên là do biến $username, có thể fix bằng cách kiểm tra biến user, rồi sau đó mới kiểm tra biến pass, hoặc một cách nhanh hơn, fix được hầu hết tất cả các lỗi SQL Injection mà chỉ cần sữ dụng một hàm có sẵn của PHP, đó là hàm addslashes.
1.1.4. Web Shell
            Shell là interface giữa user và kernel OS, người dùng (user) gõ lệnh vào, shell sẽ "đọc hiểu" & "truyền" lệnh này xuống kernel OS để thực hiện và ngược lại khi kernel xử lý xong sẽ send back lại cho user thông qua Shell.
Mục đích của Shell là giúp chúng ta có thể thực hiện các thao tác dữ liệu trên server nhanh chóng và tiện ích (giao diện giữa người dùng và máy). Có một số thì lợi dụng chức năng của shell này để tấn công server, chẳng hạn như dạng tấn công phổ biến nhất là Local Attack.
Chẳng hạn như shell R57 (và còn một số loại shell khác), con shell này tạo một giao diện và thông qua giao diện đó mình có thể biết được các tình trạng server (gần như một cách tổng quát về server). Đây là shell nổi tiếng được viết bằng PHP.
Hình 1.4 Kỹ thuật tấn công Local Attack ( Web Shell)
Để tác động vào Kernel, thực chất Web Shell sẽ dùng các shell script hay các lệnh của shell truyền vào mà thực thi. Kernel là chương trình nhân, chạy các chương trình và quản lý các thiết bị phần cứng hay đĩa và máy in. Shell script là tập hợp một nhóm lệnh và các code được đóng gói thành file .sh.  khi ta chạy file .sh thì lệnh và code trong đó sẽ chạy theo những gì tạo ra nó thiết lập bên trong.
Local Attack là khái niệm nói về các cuộc tấn công từ nội bộ bên trong, đây là 1 dạng tấn công 1 Website nào đó nhờ vào 1 Website khác, 2 Website này  cùng chung 1 server. Đây là cách dễ dàng để tấn công vào cơ sở dữ liệu  (database),  thậm  chí khống  chế  toàn  bộ  site/server  nếu  như  server không được cấu hình bảo mật tốt.
1.1.5. HTTP Fingerprinting
Chỉ có những hacker nghiệp dư mới thực hiện tấn công một server mà không biết server đó có hoạt động hay không. Phức tạp hơn, hacker sẽ thu thập càng nhiều thông tin càng tốt về kiến trúc mạng và phần mềm đang chạy trên server. Cụ thể với web server, phương thức tìm kiếm thông tin này gọi là HTTP Fingerprinting (dấu vân tay HTTP).
Hình 1.5 Kỹ thuật tấn công HTTP Fingerprinting
HTTP Fingerprinting hoạt động bằng cách kiểm tra các đặc tính riêng của web server bằng các response khi được thăm dò và lấy “dấu vân tay” của server từ những thông tin thu thập được. Sau đó dấu vân tay này được so sánh với một cơ sở dữ liệu về “dấu vân tay” cho các web server được biết đến để xác định tên web server và phiên bản mà nó đang chạy.
1.1.6. Null byte attacks
Các Byte Tấn công Null là một kiểu tấn công lợi dụng việc xử lý không phù hợp của nhân vật Byte Null giữa các ngôn ngữ khác nhau. Các Byte Null là một byte đặc biệt cho biết kết thúc của một chuỗi ký tự. Trong C và C + + ngôn ngữ lập trình các nhân vật Byte Null báo hiệu sự kết thúc của chuỗi. Khi thông dịch viên gặp các nhân vật Byte Null, nó biết rằng nó đã đạt đến kết thúc của chuỗi. Trong ngôn ngữ mutlibyte như PHP, nhân vật Byte Null không có ý nghĩa đặc biệt. PHP xử lý nó như bất kỳ ký tự mã hóa khác và không coi đó là sự kết thúc của chuỗi. Các hành vi khác nhau trong việc xử lý nhân vật này làm cho các cuộc tấn công Byte Null có thể như chúng ta sẽ thấy dưới đây. 
Ví dụ:
Xem xét một kịch bản cho phép người dùng tải về hình ảnh chỉ từ máy chủ.
readfile ($ _GET ["hình ảnh"]. "jpg.");
Kịch bản chấp nhận một tham số là tên hình ảnh mà không có một phần mở rộng. . Gắn thêm các lập trình viên jpg "mởrộng vào cuối tên hình ảnh để đảm bảo tập tin hình ảnh chỉ đang được tải về Một kẻ tấn công gửi các URL sau.:
http://www.mysite.com/downloadimage.php?image=password.txt 00%
Chú ý 00% vào cuối năm theo yêu cầu. Đây là mã hóa URL của byte null. Khi kịch bản PHP nhận được yêu cầu này, nó sẽ cố gắng để thực hiện lệnh sau:
readfile ("Password.txt \ 0.jpg");
Các \ 0 cho biết Byte Null. Trong URL nó được biểu diễn như là 00% bởi vì nó được mã hóa URL nhưng các đại diện thực tế là \ 0. Sử dụng \ 0 trực tiếp trong URL sẽ không vượt qua được Byte chacacter Null. Nó phải được mã hóa đầu tiên.
Chức năng readfile sẽ gửi tên tập tin gửi password.text \ 0.jpg một một chức năng C-ngôn ngữ mà sẽ trả lại hồ sơ. Chức năng C-ngôn ngữ sẽ thấy rằng có một nhân vật Byte Null và sẽ cho rằng các tập tin yêu cầu chỉ là Password.txt bởi vì nó sẽ bỏ qua tất cả mọi thứ sau khi các Byte Null. Những kẻ tấn công thực sự có thể lấy tại bất kỳ tập tin khác, ông muốn.
1.1.7. Blog Spam
            Thư rác (spam) đang bắt đầu tấn công các trang nhật ký trực tuyến, tin nhắn IM và điện thoại di động. Cuộc chiến chống spam vẫn là chuyện dài nhiều tập: ngay khi những công cụ chống spam tiên tiến được đưa ra thì những cách thức xảo trá mới lại mở ra một mặt trận khác.
Thư rác dạng comment là một trong những hình thức mới và một hình thức khác nữa gọi là splog (viết tắt từ spam blog), blog tạo ra chỉ đơn thuần nhằm mục đích quảng cáo.

Spammer thường tạo hàng tá, thậm chí là hàng trăm splog mà trên đó liên kết đến trang web của họ, qua đó giúp tăng vị trí trang web đó trong mục xếp hạng truy cập của Google và các trang web tìm kiếm khác. Một loại splog khác dụ người lướt web nhấn vào một quảng cáo mà liên kết đến những website có trả tiền splog này.
Hình 1.7 Kỹ thuật tấn công Null byte attacks

Tuy nhiên, đây là một hình thức tấn công cực kỳ nguy hiểm, có thể bị lợi dụng để phát tán các loại phần mềm độc hại. Trong khi đó, người dùng thường dễ tin tưởng khi nhận được một tin nhắn vì ý nghĩ chỉ có người quen với biết được ID dịch vụ tin nhắn tức thời của mình.
1.1.8. Directory traversal attack
Bảo mật Web với qua Mode Security - Bài 01_ Các kỹ thuật tấn công Web hiện nay
CÁC KỸ THUẬT TẤN CÔNG WEB PHỔ BIẾN HIỆN NAY

1.1.1 Cross-SiteScripting(XSS)

Cross-SiteScriptinghaycònđượcgọitắtlàXSS(thayvìgọitắtlàCSS đểtránhnhầmlẫnvớiCSS–CascadingStyleSheetcủaHTML)làmộtkỹ thuậttấncôngbằngcáchchènvàocácWebsiteđộng(ASP,PHP,CGI,JSP) nhữngthẻHTMLhaynhữngđoạnmãnguyhiểmcóthểgâyranguyhạicho nhữngUserkhác. Trongđónhữngđoạnmãnguyhiểmđượcchènvàohầuhếtđượcviếtnhư Client-SiteScriptbằngJavascript,Jscript,DHTMLvàcũngcóthểlàcácthẻ HTML.Kỹthuậttấncôngnàyđãnhanhchóngtrởthànhmộttrongnhữnglỗi phổbiếncủaWebApplicationvàmốiđedọacủachúngđốivớingườisử dụng  ngàycànglớn.KhảnăngcủaXSSlàđánhcắpSessionCookietừUser bênngoàiInternet,khácvớicácchươngtrìnhSniffcácSessionCookiephổ biếnhiệnnaylàchỉsniffđượccácSession CookietừnhữngUser  trong InternalNetwork.
Hình 1.1 Kỹ thuật tấn công Cross-SiteScripting(XSS)
VềcơbảnXSSgiốngnhưSQLInjectionhaySourceInjectionmàsẽđược trìnhbàytrongcácphầnsau,nócũnglàcácrequestđượcgửitừcác máy clienttớiservernhằmchènvàođócácthôngtinvượtquátầmkiểmsoát củaserver.NóchophépHackerchèncácđoạnmãvàolinkcủađườngdẫn, đểthựchiệntrêntrìnhduyệtcủaUser,dẫnđếnviệcmấtcookies,mậtkhẩu, sessionhaychènvirus…
ĐểkiểmtraWebsitecóbịmắclỗiXSS,cóthểdựavàocácđặcđiểmcủa XSScơbảnvàcácthànhphầnXSShtml.
KhácvớicáclỗikháclàgâyhạitrựctiếplênhệthốngchứaWebsite,còn XSSlạikhônggâyhạiđếnhệthốngcủasevermàđốitượngtấncôngchủyếu củaXSSlạilàngườidùng.Lợi dụngnhượcđiểmnàyhackercóthểlàmnhiều việctrongđóthôngdụngnhấtđượcliệtkêtrongnhữngmụcdướiđây.
·        Lấycắpcookies:khihackerlấycắpđượccookiesngườidùngthìhacker cóthểsửdụngvàđiềukhiểnaccountcủangườidùngđó.
·        DùngXSSđểlừađảo:ngoàiviệclấycắpcookies,cáchackercòncóthể hướngtrìnhduyệtcủangườidùngđếntrangWebmàhackerthiếtkếsẵn đểthựchiệnlừađảo.Chẳnghạnnhưlừađảochiếmdụngtàikhoảnngân hàng,tàikhoảnEmail,mãtàikhoảnchứngkhoán…
ĐánhcắpHistory:mụcđíchđánhcắphistoryđểhackertheodõithóiquen lướtWebcủangườidùng,đâylàkiểuthămdòtrướckhitấncôngcủacác hacker
1.1.2. Session hijacking
Hình 1.3 Kỹ thuật tấn công SQL Injection
Hầu hết các lỗi SQL Injection đều là do câu lệnh SQL sai hoặc do user làm cho câu lệnh SQL sai, nên nó sẽ không thực hiện đúng chức năng của nó. Ví dụ như có một script kiểm tra đăng nhập như sau:
Mã lệnh (php) <?
$username = $_POST['username']; //Lấy User và Pass từ Form
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM users WHERE user =
\"$username\" AND password = \"$password\"");
if (mysql_num_rows($result) > 0) {
//Đăng nhập thành công          }
else {//Đăng nhập không đúng Username hay Password
}
?>
Đoạn Script trên là một đoạn Script rất đơn giản thực hiện Login thông qua câu SQL kiểm tra username và password . Câu lệnh SQL nguyên thủy là :
SELECT  * FROM  users  WHERE  user  = "$username"  AND  password  = "$password"
Tuy nhiên, đây lại là một SQL Injection vô cùng lớn nguy hiểm nếu như user nhập biến user là “or 1 or user=” khi đó SQL trên sẽ trở thành:
SELECT * FROM users WHERE user = "" OR 1 OR user="" AND password = "$password"
Kết quả trả về sẽ là toàn bộ user trong Database và dĩ nhiên đây là một trường hợp Login không hợp lệ (biến password cũng có thể sử dụng để tạo SQL Injection) . Thực ra, lỗi trên là do biến $username, có thể fix bằng cách kiểm tra biến user, rồi sau đó mới kiểm tra biến pass, hoặc một cách nhanh hơn, fix được hầu hết tất cả các lỗi SQL Injection mà chỉ cần sữ dụng một hàm có sẵn của PHP, đó là hàm addslashes.
1.1.4. Web Shell
            Shell là interface giữa user và kernel OS, người dùng (user) gõ lệnh vào, shell sẽ "đọc hiểu" & "truyền" lệnh này xuống kernel OS để thực hiện và ngược lại khi kernel xử lý xong sẽ send back lại cho user thông qua Shell.
Mục đích của Shell là giúp chúng ta có thể thực hiện các thao tác dữ liệu trên server nhanh chóng và tiện ích (giao diện giữa người dùng và máy). Có một số thì lợi dụng chức năng của shell này để tấn công server, chẳng hạn như dạng tấn công phổ biến nhất là Local Attack.
Chẳng hạn như shell R57 (và còn một số loại shell khác), con shell này tạo một giao diện và thông qua giao diện đó mình có thể biết được các tình trạng server (gần như một cách tổng quát về server). Đây là shell nổi tiếng được viết bằng PHP.
Hình 1.4 Kỹ thuật tấn công Local Attack ( Web Shell)
Để tác động vào Kernel, thực chất Web Shell sẽ dùng các shell script hay các lệnh của shell truyền vào mà thực thi. Kernel là chương trình nhân, chạy các chương trình và quản lý các thiết bị phần cứng hay đĩa và máy in. Shell script là tập hợp một nhóm lệnh và các code được đóng gói thành file .sh.  khi ta chạy file .sh thì lệnh và code trong đó sẽ chạy theo những gì tạo ra nó thiết lập bên trong.
Local Attack là khái niệm nói về các cuộc tấn công từ nội bộ bên trong, đây là 1 dạng tấn công 1 Website nào đó nhờ vào 1 Website khác, 2 Website này  cùng chung 1 server. Đây là cách dễ dàng để tấn công vào cơ sở dữ liệu  (database),  thậm  chí khống  chế  toàn  bộ  site/server  nếu  như  server không được cấu hình bảo mật tốt.
1.1.5. HTTP Fingerprinting
Chỉ có những hacker nghiệp dư mới thực hiện tấn công một server mà không biết server đó có hoạt động hay không. Phức tạp hơn, hacker sẽ thu thập càng nhiều thông tin càng tốt về kiến trúc mạng và phần mềm đang chạy trên server. Cụ thể với web server, phương thức tìm kiếm thông tin này gọi là HTTP Fingerprinting (dấu vân tay HTTP).
Hình 1.5 Kỹ thuật tấn công HTTP Fingerprinting
HTTP Fingerprinting hoạt động bằng cách kiểm tra các đặc tính riêng của web server bằng các response khi được thăm dò và lấy “dấu vân tay” của server từ những thông tin thu thập được. Sau đó dấu vân tay này được so sánh với một cơ sở dữ liệu về “dấu vân tay” cho các web server được biết đến để xác định tên web server và phiên bản mà nó đang chạy.
1.1.6. Null byte attacks
Các Byte Tấn công Null là một kiểu tấn công lợi dụng việc xử lý không phù hợp của nhân vật Byte Null giữa các ngôn ngữ khác nhau. Các Byte Null là một byte đặc biệt cho biết kết thúc của một chuỗi ký tự. Trong C và C + + ngôn ngữ lập trình các nhân vật Byte Null báo hiệu sự kết thúc của chuỗi. Khi thông dịch viên gặp các nhân vật Byte Null, nó biết rằng nó đã đạt đến kết thúc của chuỗi. Trong ngôn ngữ mutlibyte như PHP, nhân vật Byte Null không có ý nghĩa đặc biệt. PHP xử lý nó như bất kỳ ký tự mã hóa khác và không coi đó là sự kết thúc của chuỗi. Các hành vi khác nhau trong việc xử lý nhân vật này làm cho các cuộc tấn công Byte Null có thể như chúng ta sẽ thấy dưới đây. 
Ví dụ:
Xem xét một kịch bản cho phép người dùng tải về hình ảnh chỉ từ máy chủ.
readfile ($ _GET ["hình ảnh"]. "jpg.");
Kịch bản chấp nhận một tham số là tên hình ảnh mà không có một phần mở rộng. . Gắn thêm các lập trình viên jpg "mởrộng vào cuối tên hình ảnh để đảm bảo tập tin hình ảnh chỉ đang được tải về Một kẻ tấn công gửi các URL sau.:
http://www.mysite.com/downloadimage.php?image=password.txt 00%
Chú ý 00% vào cuối năm theo yêu cầu. Đây là mã hóa URL của byte null. Khi kịch bản PHP nhận được yêu cầu này, nó sẽ cố gắng để thực hiện lệnh sau:
readfile ("Password.txt \ 0.jpg");
Các \ 0 cho biết Byte Null. Trong URL nó được biểu diễn như là 00% bởi vì nó được mã hóa URL nhưng các đại diện thực tế là \ 0. Sử dụng \ 0 trực tiếp trong URL sẽ không vượt qua được Byte chacacter Null. Nó phải được mã hóa đầu tiên.
Chức năng readfile sẽ gửi tên tập tin gửi password.text \ 0.jpg một một chức năng C-ngôn ngữ mà sẽ trả lại hồ sơ. Chức năng C-ngôn ngữ sẽ thấy rằng có một nhân vật Byte Null và sẽ cho rằng các tập tin yêu cầu chỉ là Password.txt bởi vì nó sẽ bỏ qua tất cả mọi thứ sau khi các Byte Null. Những kẻ tấn công thực sự có thể lấy tại bất kỳ tập tin khác, ông muốn.
1.1.7. Blog Spam
            Thư rác (spam) đang bắt đầu tấn công các trang nhật ký trực tuyến, tin nhắn IM và điện thoại di động. Cuộc chiến chống spam vẫn là chuyện dài nhiều tập: ngay khi những công cụ chống spam tiên tiến được đưa ra thì những cách thức xảo trá mới lại mở ra một mặt trận khác.
Thư rác dạng comment là một trong những hình thức mới và một hình thức khác nữa gọi là splog (viết tắt từ spam blog), blog tạo ra chỉ đơn thuần nhằm mục đích quảng cáo.

Spammer thường tạo hàng tá, thậm chí là hàng trăm splog mà trên đó liên kết đến trang web của họ, qua đó giúp tăng vị trí trang web đó trong mục xếp hạng truy cập của Google và các trang web tìm kiếm khác. Một loại splog khác dụ người lướt web nhấn vào một quảng cáo mà liên kết đến những website có trả tiền splog này.
Hình 1.7 Kỹ thuật tấn công Null byte attacks

Tuy nhiên, đây là một hình thức tấn công cực kỳ nguy hiểm, có thể bị lợi dụng để phát tán các loại phần mềm độc hại. Trong khi đó, người dùng thường dễ tin tưởng khi nhận được một tin nhắn vì ý nghĩ chỉ có người quen với biết được ID dịch vụ tin nhắn tức thời của mình.
1.1.8. Directory traversal attack
            Directory Traversal là một khai thác HTTP cho phép kẻ tấn công để truy cập vào thư mục giới hạn và thực hiện các lệnh bên ngoài thư mục gốc của web server.
Các máy chủ web cung cấp hai cấp độ chính của cơ chế bảo mật:
·      Access Control Lists (ACL)
·      Thư mục gốc
Một danh sách điều khiển truy cập được sử dụng trong quá trình cấp phép. Đó là một danh sách mà quản trị viên máy chủ web sử dụng để chỉ ra người dùng hoặc nhóm có thể truy cập, sửa đổi hoặc thực hiện các tập tin cụ thể trên máy chủ, cũng như các quyền truy cập khác.
Thư mục gốc là một thư mục cụ thể trên hệ thống tập tin máy chủ, trong đó người sử dụng bị hạn chế. Người sử dụng không thể truy cập bất cứ điều gì trên thư mục gốc này.
Ví dụtpub \ wwwroot và với thiết lập này, người dùng không có quyền truy cập vào C: \ Windows nhưng có quyền truy cập vào C: \ Inetpub \ wwwroot \ tin tức và bất kỳ thư mục khác và các tập tin trong thư mục gốc (với điều kiện là người dùng được xác thực thông qua các ACL).
Thư mục gốc ngăn chặn người dùng truy cập vào các file nhạy cảm trên máy chủ như cmd.exe trên nền tảng Windows và các tập tin passwd trên Linux / Unix.
Lỗ hổng này có thể tồn tại hoặc trong phần mềm máy chủ web riêng của mình hoặc trong mã ứng dụng web.
Để thực hiện một cuộc tấn công theo cây thư mục, tất cả các nhu cầu của một kẻ tấn công là một trình duyệt web và một số kiến ​​thức về nơi một cách mù quáng tìm thấy bất kỳ tập tin mặc định và thư mục trên hệ thống.
            Directory Traversal là một khai thác HTTP cho phép kẻ tấn công để truy cập vào thư mục giới hạn và thực hiện các lệnh bên ngoài thư mục gốc của web server.
Các máy chủ web cung cấp hai cấp độ chính của cơ chế bảo mật:
·      Access Control Lists (ACL)
·      Thư mục gốc
Một danh sách điều khiển truy cập được sử dụng trong quá trình cấp phép. Đó là một danh sách mà quản trị viên máy chủ web sử dụng để chỉ ra người dùng hoặc nhóm có thể truy cập, sửa đổi hoặc thực hiện các tập tin cụ thể trên máy chủ, cũng như các quyền truy cập khác.
Thư mục gốc là một thư mục cụ thể trên hệ thống tập tin máy chủ, trong đó người sử dụng bị hạn chế. Người sử dụng không thể truy cập bất cứ điều gì trên thư mục gốc này.
Ví dụ: thư mục gốc mặc định của IIS trên Windows là C: \ Inetpub \ wwwroot và với thiết lập này, người dùng không có quyền truy cập vào C: \ Windows nhưng có quyền truy cập vào C: \ Inetpub \ wwwroot \ tin tức và bất kỳ thư mục khác và các tập tin trong thư mục gốc (với điều kiện là người dùng được xác thực thông qua các ACL).
Thư mục gốc ngăn chặn người dùng truy cập vào các file nhạy cảm trên máy chủ như cmd.exe trên nền tảng Windows và các tập tin passwd trên Linux / Unix.
Lỗ hổng này có thể tồn tại hoặc trong phần mềm máy chủ web riêng của mình hoặc trong mã ứng dụng web.
Để thực hiện một cuộc tấn công theo cây thư mục, tất cả các nhu cầu của một kẻ tấn công là một trình duyệt web và một số kiến ​​thức về nơi một cách mù quáng tìm thấy bất kỳ tập tin mặc định và thư mục trên hệ thống.
    Blogger Comment
    Facebook Comment