1. Trang chủ
  2. » Luận Văn - Báo Cáo

tấn công kiểu SQL injection -tác hại và phòng chống

23 622 5

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 23
Dung lượng 228,51 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

tấn công kiểu SQL injection -tác hại và phòng chống

Trang 1

MỤC LỤC

MỞ ĐẦU1.Tính cấp thiết của đề tài

Sự phát triển vượt bậc của công nghệ web đã đem lại rất nhiều thuận lợi chongười sử dụng cũng như các nhà phát triển.Nhưng cùng với sự phát triển này thì các ứngdụng web cũng trở thành mục tiêu ưu thích của những kể tấn công.Các hình thức tấncông rất đa dạng như thay đổi nội dung của trang web,tấn công từ chối dịch vụ khiếncho việc truy cập trang web không thể thực hiện hoặc rất khó thực hiện,chiếm quyềnđiều khiển trang web… Mục tiêu của các hacker cũng rất khác nhau,có thể tấn công xuấtphát từ thiện chí,nhằm tìm ra những điểm yếu và thông báo cho nhà quản trị hệthống.Nghiêm trọng hơn là tấn công để phục vụ cho các mục đích xấu như tống tiềntrang web,lấy cắp những dữ liệu nhạy cảm như thông tin về thể tín dụng,mua hàng thôngqua tài khoản của người khác… Trong các hình thức tấn công thì tấn công bằng cáchchèn mã lệnh (injection) là phổ biến Tấn công website bằng kỹ thuật SQL injection từlâu đã là mối quan tâm bảo mật hàng đầu của các nhà phát triển web và chủ sở hữuwebsite Giờ đây, các cuộc tấn công này ngày càng trở nên khó phát hiện và ngăn chặnhơn.Số lượng các vụ tấn công nhằm vào cơ sở dữ liệu (CSDL) web đã lên tới một con số

kỹ lục

Tháng 7 năm 2006,theo số liệu thống kê của hãng bảo mật SecureWorks cho biết

đã phát hiện tới 8.000 vụ tấn công lên các cơ sở dữ liệu mỗi ngày Như vậy, con số này

đã tăng thêm trung bình từ 100 đến 200 vụ tấn công một ngày so với con số của 3 thángđầu năm 2006.Con số này được SecureWorks thống kê từ hệ thống các cơ sở dữ liệu củahơn 1.300 khách hàng đang sử dụng các giải pháp dịch vụ bảo mật của hãng này.SecureWorks cho biết tin tặc - chủ yếu sử dụng các máy tính tại Nga, Trung Quốc,Brazill, Hungary và Hàn Quốc và đều dùng chung một phương pháp có tên SQL

Trang 2

Injection trong những vụ tấn công vào các cơ sở dữ liệu.Một trong những vụ tấn côngSQL Injection nổi tiếng nhất chính là vụ tấn công vào CardSystems Solutions - mộthãng chuyên lưu trữ cơ sở dữ liệu thanh toán thẻ tín dụng Tin tặc đã sử dụng giải pháptấn công SQL Injection để chiếm quyền điều khiển hệ thống cơ sở dữ liệu củaCardSystems và chuyển toàn bộ cơ sở dữ liệu ra ngoài Đã có khoảng 40 triệu thẻ tíndụng rơi vào tay chúng gây ra thiệt hại hàng triệu USD.

SQL Injection là kiểu tấn công có mục tiêu rất cụ thể và thường là mục tiêu đơn

lẻ cho mỗi một vụ tấn công Chính vì thế mà những vụ tấn công như thế này thườngkhông gây được sự chú ý rộng rãi như virus hay sâu máy tính.Âm thầm như thế nhưngthiệt hại của những vụ tấn công này lại rất lớn Nếu như một máy chủ cơ sở dữ liệu bịtin tặc chiếm quyền kiểm soát thì sẽ có một khối lượng rất lớn thông tin cá nhân tàichính của người dùng sẽ rơi vào tay chúng Và nếu thành công thì có thể nói nguồnthông tin mà tin tặc thu được còn nhiều hơn rất nhiều so với tấn công phishing Tin tặckhông phải mất công giả mạo để lừa người sử dụng cung cấp thông tin cá nhân tài chính

Tỉ lệ thành công của các vụ tấn công SQL Injection thường rất cao

Mới đây nhất vào tháng 6 năm 2011,Công ty bảo mật web Armorize thông báo đãphát hiện một kiểu tấn công mới với cách thức SQL injection hàng loạt Kiểu tấn côngmới này lợi sử dụng hình thức đơn giản của mạng ngang hàng (peer-to-peer) để làm chomạng bị tổn hại khó có thể gỡ xuống Về mặt lịch sử, các cuộc tấn công web hàng loạtrất đơn giản: Mã được viết bằng ngôn ngữ truy vấn có cấu trúc (SQL) được gửi đến cơ

sở dữ liệu web phụ trợ (back-end) nhờ sử dụng một lỗ hổng trong mã của website Khi

lỗ hổng bảo mật nằm trong một ứng dụng thông thường, cuộc tấn công có thể làm hạihàng ngàn website cùng một lúc.Trong phiên bản mới nhất của kiểu tấn công, thay vìchèn vào các website một đoạn mã lệnh tĩnh đơn nhất trỏ trình duyệt truy cập đến một

số website tải về mã độc hại, những kẻ tấn công tạo ra một đoạn mã lệnh động dẫnkhách truy cập tới máy chủ web đã bị xâm nhập từ trước Kỹ thuật mới làm cho việc lậpdanh sách đen (blacklisting) khó khăn hơn nhiều

Trên thực tế do sự phát triển mạnh mẽ từng giờ,từng ngày của công nghệ thôngtin cho nên các kiểu tấn công của các hacker cũng ngày càng tinh vi,phức tạp và khó

Trang 3

ngăn chặn.Xuất phát từ những lý do trên,tôi chọn đề tài “ tấn công kiểu SQL tác hại và phòng chống” làm đề tài nghiên cứu.

injection-2.Mục đích nghiên cứu

− Giúp chúng ta có thể hiểu hơn về các ứng dụng website, các mối đe dọa về vấn

đề an toàn thông tin khi chúng ta làm việc trên ứng dụng web hàng ngày, hiểu rõ hơn vềcác kỹ thuật tấn công và bảo mật web

− Xác định được nguyên nhân,nhận diện chính xác đối tượng động cơ,cách thứccủa kể tấn công xâm nhập vào cơ sở dữ liệu.Xác định mục tiêu,mối nguy hiểm thườngtrực về an ninh ứng dụng web của các tổ chức

− Hiểu rõ khái niệm sql injection và phương thức hoạt động của các hackerthông qua lỗ hổng này

− Biết sử dụng phương pháp và các công cụ cơ bản để kiểm tra an ninh bảo mậttrên ứng dụng web nhằm có cách phòng chống hiệu quả

3.Đối tượng và phạm vi nghiên cứu

Tìm hiểu kỹ thuật tấn công phổ biến nhất hiện nay là sql injection.Cách bảo mậtphòng thủ kiểu tấn công này một cách tổng quan nhất

4.Phương pháp nghiên cứu

− Tiếp cận ngôn ngữ truy vấn có cấu trúc SQL

− Nghiên cứu các kỹ thuật tấn công sql injection thông qua các lỗ hổng bảo mật

từ đó đưa ra các giải pháp phòng chống có hiệu quả

5.Ý nghĩa khoa học và thực tiễn của đề tài

Theo tài liệu Hacking Exposed Web 2.0 đánh giá Mức độ phổ biến của phươngpháp tấn công kiểu sql injection là rất cao( 8/10), bởi vì nó cũng khá đơn giản để thựchiện( 8/10), là một trong những lỗi bảo mật phổ biến nhất,xác xuất gặp lỗi bảo mật nàykhá cao và các tác động của SQL Injection tới hệ thống là rất nguy hiểm( 9/10) Chính

Trang 4

vì thế, nên tổng thể nguy cơ này được đánh giá 9/10 Đây thật sự là một lỗ hổng về bảomật rất đáng được quan tâm đến.

Dựa vào lỗi SQL Injection, hacker có thể làm được những việc sau:

• Có thể lấy được rất nhiều thông tin quan trọng trong cơ sở dữ liệu của một

hệ thống web như account và password của admin của một web site, haycác thông tin quan trọng về thẻ tín dụng của khách hàng trong một ngânhàng nào đó…

• Có thể thêm, xóa, sửa cơ sở dữ liệu của đối tượng bị tấn công theo ý muốn

• Có thể tạo một backdoor cho những lần tấn công sau

• Có thể đánh sập hoàn toàn một hệ thống

• Có thể dùng như một phương pháp tấn công DoS

Các cuộc tấn công sql injection thường nhắm đến các cơ sở dữ liệu mang tínhthương mại,các website của thành phố thậm chí là các website của chính phủ,hầu hết cácwebsite bị tấn công đều thuộc loại đáng tin cậy,hợp pháp và an toàn tuyệt đối trong mắtngười dùng

Xuất phát từ thực tế trên việc nghiên cứu đề tài này là hoàn toàn cấp thiết

6.Bố cục của luận văn

Mở Đầu:

Chương 1: Giới thiệu về SQL Injection

Chương 2: SQL Injection và các cách tấn công phổ biến

Chương 3: Phòng chống SQL Injection

Kết Luận:

Kế hoạch dự kiến triển khai đề tài

Tài liệu tham khảo

Trang 5

CHƯƠNG 1: GIỚI THIỆU VỀ SQL INJECTION 1.1 Đặc trưng của ứng dụng sử dụng cơ sở dữ liệu

Hiện nay những ứng dụng phổ biến nhất và chiếm thị phần cũng như doanh thucao nhất đều là những ứng dụng hổ trợ tính năng quản lý.Dữ liệu là thứ sống còn trongmọi hoạt động nghiệp vụ hiện tại.Chính vì lý do đó, các ứng dụng nghiệp vụ hiện tạiđều xây dựng trên những mô hình phát triển gắn liền với cơ sở dữ liệu An toàn của

dữ liệu được đặt nặng lên tính an toàn và bảo mật của ứng dụng Web kết nối tới cơ sở

dữ liệu

Các mô hình phát triển ứng dụng Web hiện tại được sử dụng phổ biến nhất là3-tier, ngoài ra còn có một số bản cải tiến, mở rộng mô hình này nhằm những mụcđích riêng

Mô hình ứng dụng 3-tier

Các mô hình trên luôn có một số điểm chung, đó là database server chỉ làmnhiệm vụ lưu trữ dữ liệu, database hồi đáp những truy vấn dữ liệu được xây dựng theochuẩn (ví dụ như SQL) Mọi thao tác xử lý dữ liệu input, output của database serverđều được ứng dụng web ở tầng Logic xử lý Các vấn đề an ninh phát sinh đa phần sẽnằm ở tầng này

Trang 6

1.2 Tầm quan trọng của các câu lệnh sql đối với một hệ thống web

Cơ sở dữ liệu(database) được coi như là "trái tim" của hầu hết các website Nóchứa đựng những dữ liệu cần thiết để website có thể chạy và lưu trữ các thông tin phátsinh trong quá trình chạy Nó cũng lưu trữ những thông tin cá nhân , thẻ tín dụng , mậtkhẩu của khách hàng , của user và thậm chí là cả của Administrator Để lấy các thông tincần thiết từ cơ sở dữ liệu thì các câu lệnh SQL sẽ đảm đương trách nhiệm thực hiện cácyêu cầu truy vấn được đưa ra từ phía người sử dụng: khi người dùng đăng nhập vào hệthống, lấy một thông tin nào đó trên web… đều cần sử dụng các câu lệnh SQL, hay nóicách khác, các câu lệnh SQL đóng một vai trò rất quan trọng đối với một hệ thống web

1.3.Khái niệm sql injection

SQL Injection là một kỹ thuật điền vào những đoạn mã SQL bất hợp pháp chophép khai thác một lỗ hổng bảo mật tồn tại trong cơ sở dữ liệu của một ứng dụng Lỗhổng bảo mật này có thể xuất hiện khi ứng dụng không có đoạn mã kiểm tra chuỗi ký tựthoát nhúng trong câu truy vấn SQL hoặc do sự định kiểu đầu vào không rõ ràng hay dolỗi cú pháp SQL của lập trình viên khiến cho một đoạn mã ngoại lai có thể được xử lýngoài ý muốn Nó là một ví dụ của sự rủi ro khi một ngôn ngữ lập trình hay ngôn ngữkịch bản được nhúng trong một ngôn ngữ khác Tấn công SQL injection còn có thể hiểu

là hình thức tấn công chèn bất hợp pháp các đoạn mã SQL

SQL Injection là một dạng tấn công dễ thực hiện, hầu hết mọi thao tác ngườitấn công cần được thực hiện với một trình duyệt web, có thể kèm theo một ứng dụngproxy server Chính vì đơn giản như vậy cho nên bất cứ ai cũng có thể học cách tiếnhành một cuộc tấn công Lỗi bắt nguồn từ mã nguồn của ứng dụng web chứ khôngphải từ phía database, chính vì thế bất cứ thành phần nào của ứng dụng mà ngườidùng có thể tương tác được để điều khiển nội dung (ví dụ : các form, tham số URL,cookie, tham số referrer, user-agent, …) đều có thể được sử dụng để tiến hành chèntruy vấn có hại

Để hiểu rõ hơn về sql injection chúng ta cùng xem một ví dụ minh họa sau:

Trang 7

Khi người sử dụng truy cập vào một website tin tức và click vào một tin có mã số là 1thì đường dẫn gửi tới máy chủ sẽ có nội dung như sau:

Khi đó,để cung cấp nội dung tin số 1 trả về cho người sử dụng,website sẽ truy vấn tới

cơ sở dữ liệu để lấy tin.Câu truy vấn SQL do người lập trình viết sẽ có cấu trúc nhưsau:

SELECT* FROM News WHERE Newsld =”+N_ID+”

Trong trường hợp này với yêu cầu lấy tin số 1 thì biến N_ID=1.Kết quả câu truy vấnSQL thật tới cơ sở dữ liệu sẽ là: SELECT* FROM News WHERE Newsld =1

Do sơ xuất của lập trình viên trong khi lập trình,không kiểm tra tính hợp lệ của N_IDtrước khi thực thi câu truy vấn SQL,hacker có thể lợi dụng để chèn các câu truy vấnnguy hiểm tới cơ sở dữ liệu

Chúng ta có thể thấy phần bôi đậm trong hình minh họa trên là một câu truy vấn độchại do hacker chèn vào.Câu truy vấn này cũng sẽ được thực thi cùng với câu truy vấncủa người lập trình viết và sẽ khiến thông tin trong cơ sở dữ liệu bị xóa

SELECT * FROM News WHERE NewsId = 1; DELETE FROM NEWS WHERE NewsId=2

Dưới đây là các sơ đồ kết nối trong ví dụ trên:

Minh họa cho một truy vấn thông thường tới website

Trang 8

Minh họa cho hệ thống tồn tại lỗ hổng SQL Injection

Minh họa cho hệ thống không tồn tại lỗ hổng SQL Injection

Như vậy có thể thấy,lỗi SQL Injection xẩy ra khi website không được lập trìnhtốt,bản chất điểm yếu sql injection là xuất hiện từ trong quá trình xử lý dữ liệu inputcủa người dùng bên trong mã nguồn, do chính thời gian bảo trì mã nguồn thường kéodài nên các lỗi sql injection cũng chậm được khắc phục triệt để

Trang 9

CHƯƠNG 2: SQL INJECTION VÀ CÁC CÁCH TẤN CÔNG PHỔ BIẾN

Các cuộc tấn công nhắm tới lớp database của ứng dụng web xét theo mục đíchđược chia làm hai loại chính: thứ nhất là nhắm tới dữ liệu chứa trong database, thứ hai lànhắm tới chính bản thân database.Trường hợp thứ nhất thường là kẻ tấn công nhắm tớicác thông tin có giá trị như thông tin cá nhân,thông tin tài chính… trường hợp thứ hai thì

kẻ tấn công muốn biến database thành cửa ngõ để thâm nhập sâu hơn vào trong mạnglưới của tổ chức sở hữu ứng dụng web đang tấn công.Chúng ta xét một số phương pháptấn công thông thường nhằm phục vụ hai mục đích trên bao gồm: vượt qua kiểm tra lúcđăng nhập (authorization bypass), sử câu lệnh SELECT, sử dụng câu lệnh INSERT, sửdụng các Stored-Procedures,sử dụng Blind SQL Injection…

2.1 Dạng tấn công vượt qua kiểm tra đăng nhập

Với dạng tấn công này, tin tặc có thể dễ dàng vượt qua các trang đăng nhậpnhờ vào lỗi khi dùng các câu lệnh SQL thao tác trên cơ sở dữ liệu của ứng dụng web

Xét một ví dụ điển hình, thông thường để cho phép người dùng truy cập vàocác trang web được bảo mật, hệ thống thường xây dựng trang đăng nhập để yêu cầungười dùng nhập thông tin về tên đăng nhập và mật khẩu Sau khi người dùng nhậpthông tin vào, hệ thống sẽ kiểm tra tên đăng nhập và mật khẩu có hợp lệ hay không đểquyết định cho phép hay từ chối thực hiện tiếp

Trong trường hợp này, người ta có thể dùng hai trang, một trang HTML đểhiển thị form nhập liệu và một trang ASP dùng để xử lí thông tin nhập từ phía ngườidùng

Ví dụ:

login.htm

<form action="ExecLogin.asp" method="post">

Username: <input type="text" name="fUSRNAME"><br>

Password: <input type="password" name="fPASSWORD"><br>

<input type="submit">

</form>

Trang 10

" ' and USR_PASSWORD=' " & vPassword & " ' "

Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.Open strSQL, "DSN= "

If (objRS.EOF) Then Response.Write "Invalid login." Else

Response.Write "You are logged in as " & objRS("USR_NAME")

đề cho một lỗi SQL injection Đặc biệt, chỗ sơ hở nằm ở chỗ dữ liệu nhập vào từngười dùng được dùng để xây dựng trực tiếp câu lệnh SQL Chính điều này cho phépnhững kẻ tấn công có thể điều khiển câu truy vấn sẽ được thực hiện Ví dụ, nếu ngườidùng nhập chuỗi sau vào trong cả 2 ô nhập liệu username/password của tranglogin.htm là: ' OR '' = ' '. Lúc này, câu truy vấn sẽ được gọi thực hiện là:

SELECT * FROM T_USERS WHERE USR_NAME ='' OR ''='' and USR_PASSWORD= '' OR ''=''

Câu truy vấn này là hợp lệ và sẽ trả về tất cả các bản ghi của T_USERS vàđoạn mã tiếp theo xử lí người dùng đăng nhập bất hợp pháp này như là người dùngđăng nhập hợp lệ

Trang 11

2.2 Dạng tấn công sử dụng câu lệnh SELECT

Dạng tấn công này phức tạp hơn Để thực hiện được kiểu tấn công này, kẻtấn công phải có khả năng hiểu và lợi dụng các sơ hở trong các thông báo lỗi từ hệthống để dò tìm các điểm yếu khởi đầu cho việc tấn công

Xét một ví dụ rất thường gặp trong các website về tin tức Thông thường, sẽ

có một trang nhận ID của tin cần hiển thị rồi sau đó truy vấn nội dung của tin có IDnày

Ví dụ: http: / / ww w .m y h o s t c o m / sho w ne w s a s p?I D = 1 2 3 Mã nguồn cho chức năng nàythường được viết khá đơn giản theo dạng:

<%

Dim vNewsID, objRS, strSQL

vNewsID = Request("ID")

strSQL = "SELECT * FROM T_NEWS WHERE NEWS_ID =" & vNewsID

Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.Open strSQL, "DSN= "

Set objRS = Nothing

%>

Trong các tình huống thông thường, đoạn mã này hiển thị nội dung của tin có

ID trùng với ID đã chỉ định và hầu như không thấy có lỗi Tuy nhiên, giống như ví dụđăng nhập ở trước, đoạn mã này để lộ sơ hở cho một lỗi SQL injection khác Kẻ tấncông có thể thay thế một ID hợp lệ bằng cách gán ID cho một giá trị khác, và từ đó,khởi đầu cho một cuộc tấn công bất hợp pháp, ví dụ như: 0 OR 1=1 (nghĩa là

http://ww w m y host c om/ s h o w n e w s a s p ?ID=0 or 1=1)

Câu truy vấn SQL lúc này sẽ trả về tất cả các article từ bảng dữ liệu vì nó sẽthực hiện câu lệnh:

Ngày đăng: 06/10/2015, 00:19

TỪ KHÓA LIÊN QUAN

w