Tải bản đầy đủ (.pdf) (37 trang)

bảo mật web saver và cách phòng chống tấn công web server

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (735.59 KB, 37 trang )

LI M U
Các máy ch Web (Webserver) luôn là nh  t màu m cho các
hacker tìm kim các thông tin giá tr hay gây ri vì mt mm ho
có th là bt c cái gì t kiu tn công t chi dch v, qung cáo các website có
ni dung không lành mi ni dung các file hay phn mm cha mã
nguy him.Các nhà qun tr luôn phu, lo l bo
v máy ch web và an toàn thông tin cho toàn b h thng. Vì vy, tôi quynh
ch tài o M tìm hi v quan trng này.
Trong lu, tôi xin trình bày nhng phn chính sau :
ng quan web server
t s c tn công web server
t s gii pháp bo mt web server
Thông qua nh tài, tôi mong rng nhng v mà 
c trình bày có th làm rõ phn nào v bo mt web server hin nay. Mc du 
c g lý lun, thi gian có h tài yêu cu hiu
bit v thc t cao, nên không th c nhng thiu sót, rc s
thông cm, ch dn a thy giáo và các bn.
Em xin chân thành c
Thành phố Hồ Chí Minh, ngày 27 tháng 10 năm 2012



 4
 4
 5
1.2.1.Internet Information Services (IIS) 6
1.2.2.Apache Web Server 7
 9
1.3.1.SSL là gì? 9
1.3.2. Giao thc SSL 10
1.3.3.Các thut toán mã hoá dùng trong SSL 12


 14
2.1. SQL injection 14
2.1.1. SQL Injection là gì? 14
2.1.2. Các dng tn công bng SQL Injection 14
2.1.3. Cách phòng tránh 20
 phòng tránh, ta có th thc hin  hai mc: 20
2.2 Tn công Cross-Site 21
2.2.1 Cross-Site Scripting hay XSS là gì? 21
2.2.2 Cách hong ca XSS. 21
2.2.3 Cách phòng chng. 22
2.3. Tn công t chi dch v (DOS) 25
2.3.1.Khái nim : 25
2.3.2. Các cách thc tn công: 25
2.3.3.Các cách phòng chng 28
 30
 31
 31
3.2.1.Gii thiu v Mod_security 31
t và cu hình 32
3.3. Secure Web Server (HTTPS) 34
 36
Kt Lun 37




Web Server là máy ch ng ln, t   tr
t ngân hàng d liu, cha nhc thit k cùng vi
nh              
Multimedia).


Web Server có kh n máy khách nhng trang Web thông qua môi
ng Internet (hoc Intranet) qua giao thc HTTP - giao thc thit k  gi
n trình duyt Web (Web Browser), và các giao thc khác.
Tt c u có ma ch IP (IP Address) ho
có mt Domain Name. Gi s khi bánh vào thanh Address trên trình duyt ca
bn mn s gi mt yêu cu
n mt Server có Domain Name là www.abc.com. Server này s tìm trang Web có
tên là index.htm ri gn trình duyt ca bn.Bt k m
có th tr thành mt Web Server bi vit lên nó mn
mt ni vào Internet.
Khi máy tính ca bn kt nn mt Web Server và gn yêu cu truy
cp các thông tin t mt trang We nhn yêu cu
và gi li cho bn nhng thông tin mà bn mong mun.
Ging ng phn mm khác mà bt trên máy tính ca
 là mt ng dng phn mt,
và chy trên máy tính dùng làm Web Server, nh i s
dng có th truy cn các thông tin ca trang Web t mt máy tính khác  trên
mng (Internet, Intranet).




Web Server Software còn có th c tích hp vi CSDL (Database), hay
u khin vic kt n có th truy cp và kt xut thông tin t CSDL
lên các trang Web và truyn ti dùng.Server phi hong liên
tc 24/24 gi, 7 ngày mt tun và 365 ngày m phc v cho vic cung cp
thông tin trc tuyn. V ng trong chng và
t n thông tin t server và máy tính truy cp.


1.2.
Có khá nhiu sn phm web server khác nhau, vic la chn mt web server
phù hp s da  c vi h u hành và
các ng dng khác, kh t lng dng phía server, kh
o mt d liu, kh t bn trang web, các công c h tr khi xây
d  Internet
Information Services (IIS), Apache Web Server     
web 
1.2.1.Internet Information Services (IIS)

IIS là dch v thông tin Internet do Microsoft phát trin, sn phc
tích hp cùng vi h u hành Windows. Phiên bn mi nht hin nay là IIS 7.5
c chy trên h u hành Windows server 2008 (hay windows 7). Trong IIS
bao gm nhiu dch v dch v ch v Web Server, dch v
 cn dch v Web Server. IIS Web Server (gi tng mi
yêu cu ch yu ca m tin cy, hi 
giám sát (qun tr), tính bo mt và tính kh thi trong vic phát trin các dch v
ng dng. Tt c các ci tin này là kt qu là s kt hp cht ch cùng vi các tính
c cung cp trong h u hành Windows.

1.2.2.Apache Web Server
    t s n lc rt ln trong vic phát
trin và duy trì mt Web Server mã ngun m cho các h u hành, bao gm
Unix, Linux và t Web Server hi t tt c 
bo mt, hiu sut, m rng và phát trin cung cp các dch v ng b
trong các chun Web hin hành.

m ni bt ca Apache:
 Ngày nay Apache có th chy kt hp (hybrid) gia ch   lý và ch
  lnh.

 H tr nhiu giao thc phát tri có th phc v trên nhiu
giao thc khác nhau.
 Ngày càng h tr t    h    
BeOS,OS/2vàWindows.
 Ngày càng phát trin và hoàn thin các API (Application Program
Interface).
 H tr IPv6.
 H tr nhi lc (Filtering) các dòng d lin ho
server.
 H tr nhiu ngôn ng hin th các thông báo li.
 n và d dàng thit lp các tham s cho Web Server qua
các file cu hình.

1.3.1.SSL là gì?
Vic kt ni gia mt Web browser ti bt k m nào trên m
qua rt nhiu các h thc lp mà không có bt k s bo v nào vi các thông
ng truyn. Không mt ai k c i s dng ln Web server có bt k
s kii va d liu hay có th kic liu có ai
ng truy bo v nhng thông tin mt trên
mng Internet hay bt k mt hp nhng yu t 
thit lc mt giao dch an toàn:
 Xác thc: m bo tính xác thc ca trang mà bn s làm vic  u kia ca
kt ny, các trang Wen phi kim tra tính xác thc
ci s dng.
 Mã hoá: m bo thông tin không th b truy cp bng th 
loi tr vic nghe trm nhy cc truyn qua
Internet, d liu ph     không th b  c bi nhng
i gi nhn.
 Toàn vn d liu: m bo thông tin không b sai lch và nó phi th hin
chính xác thông tin gc gn.


Vi vic s dng SSL, các Web site có th cung cp kh o mt thông tin,
xác thc và toàn vn d li     c tích hp sn vào các
i s dng làm vic vi các trang Web  ch
 an toàn. Khi Web browser s dng kt ni SSL ti server, bing  khóa s
xut hin trên thanh trng thái ca ca s p nhp
a ch URL s t phiên giao dch HTTPS s dng cng 443
thay vì s dng c.
1.3.2. G
c phát trin bi Netscape, ngày nay giao thc Secure Socket Layer
c s dng rng rãi trên World Wide Web trong vic xác thc và mã
hoá thông tin gia client và server. T chc IETF (Internet Engineering Task Force
t li tên là TLS (Transport Layer Security). Mc dù là có
s thai v  là mt phiên bn mi ca SSL. Phiên bn TSL
i phiên bn SSL 3.1. Tuy nhiên SSL là thut ng c s dng
r

Cu trúc ca SSL và giao thc SSL
c thit k t giao thc riêng cho v bo mt có th h
tr cho rt nhiu ng dng. Giao thc SSL hoi
các giao thc ng dng t        
Protocol), IMAP ( Internet Messaging Access Protocol) và FTP (File Transport
Protocol). Trong khi SSL có th s d h tr các giao dch an toàn cho rt
nhiu ng dng khác nhau trên Internet, thì hic s dng chính cho
các giao dch trên Web.
SSL không phi là mt giao th, mà là mt tp các th tc chun
hoá  thc hin các nhim v bo mt sau:
 Xác thc server: i s dng xác thc server mun kt ni.
Lúc này, phía browser s dng các k thu chc chn
rng certificate và public ID ca server là có giá tr c cp phát bi mt

y cu
này rt quan tri vi dùng. Ví d i mã s credit card qua
mi dùng thc s mun kim tra liu server s nhn thông tin này
à server mà h nh gn không.
 Xác thc Client: Cho phép phía server xác thi s dng mun kt
n dng các k thu kim tra xem
certificate và public ID ca server có giá tr c cp phát bi
my ca server
u này rt quan tri vi các nhà cung cp. Ví d t
nh gi các thông tin tài chính mang tính bo mt ti khách hàng thì
h rt mun kinh danh ci nhn.
 Mã hoá kt ni: Tt c i gic mã hoá
ng truyn nhm nâng cao kh o mu này rt quan trng
i vi c hai bên khi có các giao dtt c các
d lic gt kt nc bo v nh
 t ng phát hin các xáo tri trong d li
thu hash algorithm).
Giao thc SSL bao gm 2 giao thc con: giao thc SSL record và giao thc SSL
handshake. Giao thnh d truyn d liu.
Giao thc SSL handshake (gi là giao thc bt tay) s s dng SSL record protocol
 i mt s thông tin gia server và client vào lu tiên thit lp kt ni
SSL.
1.3.3
Các thut toán mã hoá (cryptographic algorithm hay còn gi là cipher) là các
hàm toán hc s d mã hoá và gii mã thông tin. Giao thc SSL h tr
rt nhiu các thuc s d thc hin các công vic trong quá
trình xác thc server và client, truyn ti các certificates và thit lp các khoá ca
tng phiên giao dch (sesion key). Client và server có th h tr các b mt mã
(cipher suite) khác nhau tu thuc vào nhiu yu t 
chính sách ca công ty v  dài khoá mà h cm thy chp nhc - u này

n m bo mt c
 Các thut toán:
 DES (Data Encryption Standard): Là mt thut toán mã hoá có chiu dài
khoá là 56 bit.
 3-DES (Triple-DES): Là thu dài khoá gp 3 l dài
khoá trong mã hoá DES.
 DSA (Digital Signature Algorithm): Là mt phn trong chun v xác thc
s c chính ph M s dng.
 KEA (Key Exchange Algorithm): Là mt thu    
c chính ph M s dng.
 MD5 (Message Digest algorithm): c phát thin bi Rivest.
 RSA: là thut toán mã hoá công khai dùng cho c quá trình xác thc và mã
hoá d lic Rivest, Shamir, and Adleman phát trin.
 RSA key exchange: là thu i khoá dùng trong SSL da trên
thut toán RSA.
 RC2 and RC4: là các thuc phát trin bi Rivest dùng cho
RSA Data Security.
 SHA-1 (Secure Hash Algorithm): là mt thu.
 Các phiên bn SSL 2.0 và SSL 3.0 h tr cho hu ht các b i
qun tr có th tu chn b mã hoá s dùng cho c client và server. Khi mt
n bt tay (handshake), h s
nh b mã hoá mnh nht có th và s dng chúng trong phiên giao
dch SSL.

2.1. SQL injection
2.1.1. SQL Injection là gì?
SQL injection là mt cho phép nhng k tn công li dng l hng
trong vic kim tra d liu nhp trong các ng dng web và các thông báo li ca
h qun tr  d li "tiêm vào" (inject) và thi hành các câu lnh SQL bt
hi phát trin ng dc). Hu qu ca nó rt

tai hi vì nó cho phép nhng k tn công có th thc hin các thao tác xóa, hiu
ch d liu ca ng dng, thm chí là server mà
ng dy. Lng xy ra trên các ng dng web có d liu
c qun lí bng các h qun tr  d li
DB2, Sysbase.
2.1.2. Các dng tn công bng SQL Injection
Có bn d  ng bao g t qua ki    p
(authorization bypass), s dng câu ln SELECT, s dng câu lnh INSERT, s
dng các stored-procedures [2], [3].
a. Dng tt qua kip
Vi dng tn công này, tin tc có th d p
nh vào li khi dùng các câu l d liu ca ng dng
web.
Xét mt ví d  i dùng truy cp vào
c bo mt, h thng xây d yêu cu
i dùng nhp thông tin v p và mt khi dùng nhp
thông tin vào, h thng s ki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.
ng hi ta có th dùng hai trang, m
hin th form nhp liu và m  x lí thông tin nhp t phía
i dùng.

Ví d:
login.htm

execlogin.asp

Thot nhìna bt c mt
l hng v i dùng không th 
<form action="ExecLogin.asp" method="post">

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

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

</form>
<%
Dim vUsrName, vPassword, objRS, strSQL

vUsrName = Request.Form("fUSRNAME")

vPassword = Request.Form("fPASSWORD")



strSQL = "SELECT * FROM T_USERS " & _

"WHERE USR_NAME=' " & vUsrName & _

" ' 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")
End If



Set objRS = Nothing

%>
nhp và mt khu hp ln mã này thc s không an toàn và là tin
 cho mt lc bit, ch  nm  ch d liu nhp vào t
 xây dng trc tip câu lu này cho
phép nhng k tn công có th u khin câu truy vn s c thc hin. Ví d,
ni dùng nhp chui sau vào trong c 2 ô nhp liu username/password ca
trang login.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n mã
tip theo x p bt h
nhp hp l.
b. 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 thc hic kiu tn công này, k
tn công phi có kh g hiu và li d trong các thông báo li t h
th m yu khu cho vic tn công.
Xét mt ví d rng gp trong các website v tin tng, s có mt

trang nhn ID ca tin cn hin th rn ni dung ca tin có ID này.
Ví d: Mã ngun cho ch
c vin theo dng sau:



Trong các tình hun mã này hin th ni dung ca tin có ID
trùng v nh và hy có li. Tuy nhiên, gi
p   l  cho mt li SQL injection khác. K tn
cô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      
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:
SELECT * FROM T_NEWS WHERE NEWS_ID=0 or 1=1
Mng hp khác, ví d i dùng
nhp vào các thông tin tìm king gp là:

<%
Dim vNewsID, objRS, strSQL

vNewsID = Request("ID")



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



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

objRS.Open strSQL, "DSN= "



Set objRS = Nothing

%>

 c có th li d trong câu truy v
nhng tên tác gi bng chui giá tr:
' UNION SELECT ALL SELECT OtherField FROM OtherTable WHERE ' '='
(*)
Lúc này, ngoài câu truy v thc hin thêm
lnh tip theo sau t khóa UNION na.
Tt nhiên các ví d gì nguy hinu k tn
công có th xóa toàn b  d liu bn lnh nguy him
nh DROP TABLE. Ví d 
 bic ng dng web b li dc. hãy nhp vào chu
trên, nu h thng báo li v cú pháp d
có th bit chc là h thc hin câu SELECT sau t 
vy mi có th tr v l tình to ra trong câu lnh SELECT.
 bic tên ca các bng d liu mà thc hin các thao tác phá hoi khi ng
dng web b li SQL injection ta ch cn chnh li câu lnh SELECT, ví d 
' UNION SELECT name FROM sysobjects WHERE xtype = 'U' là có th lit kê
c tên tt c các bng d liu.
c. Dng tn công s dng câu lnh INSERT
<%
Dim vAuthorName, objRS, strSQL


vAuthorName = Request("fAUTHOR_NAME")



strSQL = "SELECT * FROM T_AUTHORS WHERE AUTHOR_NAME =' " &
_

vAuthorName & " ' "



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

objRS.Open strSQL, "DSN= "





Set objRS = Nothing

%>
Ch thii dùng có th
xem và hiu chnh thông tin ca mình. SQL injection có th c dùng khi h
thng không kim tra tính hp l ca thông tin nhp vào.
Ví d, mt câu lnh INSERT có th có cú pháp d

Nn mã xây dng câu lnh SQL có dng :
ng các ng dt tài kho

tham

Thì chc chn s b li SQL injection, bi vì nu ta nhng th nht
ví d 
truy vn s là: INSERT INTO TableName VALUES(' ' + (SELECT TOP 1
lúc thc hin lnh xem
u thc hin thêm mt lnh n
TOP 1 FieldName FROM TableName
d. Dng tn công s dng stored-procedures
Vic tn công bng stored-procedures s gây tác hi rt ln nu ng dng
c thc thi vi quyn qun tr h thng 'root'. Ví d, nn mã tiêm
vào d thng s thc hin
lnh lic trên  \ t server. Vic phá hoi kiu nào tu thuc
vào câu lng sau cmd.exe.
<%
strSQL = "INSERT INTO TableName VALUES(' " & strValueOne & " ', ' " _
& strValueTwo & " ', ' " & strValueThree & " ') "



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

objRS.Open strSQL, "DSN= "





Set objRS = Nothing


%>

2.1.3. Cách phòng tránh
 phòng tránh, ta có th thc hin  hai mc:
a. Kim soát cht ch d liu nhp vào
  xy ra, hãy bo v các câu lnh SQL là
bng cách kim soát cht ch tt c các d liu nhp nhc t ng
Request (Request, Request.QueryString, Request.Form, Request.Cookies, and
Request.ServerVariables).
Ví d, có th gii hn chiu dài ca chui nhp liu, hoc xây dng hàm
 thay th các dng 2 d


ng hp d liu nhp vào là s, li xut phát t vic thay th mt
giá tr  liu s bng chui cha câu lnh SQL bt hp pháp.
 n hãy kim tra d liu hay không bng
hàm IsNumeric().
Ngoài ra có th xây dng hàm loi b mt s kí t và t khóa nguy him
: ;, ,select, i chui d liu nhp t 
hn ch các tn công dng này:
b. Thit lp cu hình an toàn cho h qun tr  d liu
C kim soát cht ch và gii hn quyn x lí d lin tài
khoi dùng mà ng d dng. Các ng dng
n các quyn càng b hn ch, thit hi
càng ít.
<%
Function EscapeQuotes(sInput)

sInput = replace(sInput, " ' ", " ' ' ")
EscapeQuotes = sInput 5


End Function

%>
  SQL Injection attack, nên chú ý loi b bt kì
t nào chp chuyn xui dùng khi ng
dng có li. Các thông báo lng tit l các chi tit có th cho
phép k tn công bim yu ca h thng.

2.2 -Site
2.2.1 Cross-Site Scripting hay XSS là gì?
Cross-Site Scripting hay 
    -         
 


-

t t thành mt trong nhng li ph bin nht
ca Web Applications và m ci vi s dng ngày càng
li chin thng trong cu
XSS mi.
2.2.2 Cách   XSS.
V 
yêu cc gi t các máy client ti server nh
t quá tm kim soát ca server. Nó có th là mc gi t các
form d liu ho  :

was found
!');</script>


Và rt có th trình duyt ca bn s hin lên mt thông báo "XSS was found !".
n mã trong th script không h b gii hn bi chúng hoàn toàn có th
thay th bng mt file ngun trên mt server khác thông qua thuc tính src ca th
  ng h nguy him ca
các li XSS. t tn công khác có th c
d liu ngun ca web server (mã ngun, c d liu) thì XSS ch gây
tn hi vi website  phía client mà nn nhân trc tip là nhi khách
duy d deface các
   n ch tn công vào b mt ca website. Tht vy, XSS là
nhng Client-Side Script, nh n mã này s ch chy bi trình duyt phía
n h thng website nm trên server.
Mc tiêu tn công ca XSS không ai khác chính là nhi s dng khác
ca website, khi h vô tình vào các trang có chn mã nguy him do các
 li h có th b chuyn tt li homepage, hay nng
t mt khu, mt cookie thm chí máy tính bn có th s b cài các loi
virus, backdoor, worm

Có nhiu li khuyn cáo dc  ra ,tuy nhiên cho n nay vn  có bin p
háp
nào có th phòng chng trit  CSRF.Sau  là mt vài  thut s dng.
a. H   gian    session (session timeout)
Tùy theo ngôn ng hoc web server dc s dng mà các thc hin có th rt khác

nhau.Vi PHP,thông s "session.gc_maxlifetime" trong file php.ini qui nh thi
gian hiu lc ca session.
Nu lp trình viên s dng ngôn ng k h tr chc  này và h phi qun lý
session bng CSDL (ví d  bng session ) hay bng các file tm (ví
d /tmp/session/) thì h s vit các  trình h tr vic xóa các session này
(cron job,scheduler )

b. S  get và post  lí
 thc GET dc dùng  truy vn d liui vi các thao tác to ra s thay

i h thng thì các  thc khác  POST hay PUT s dc s dng (theo
khuyn cáo ca W3C-t chc to ra chun http)
c. S    các thông báo xác 
Captcha dc s dng  nhn bit i ng  thao tác vi h thng là con
i hay k?Các thao tác quan trng  nhp" hay là " chuyn
khon" ,"thanh toán" ng là hay s dng captcha.Tuy nhiên ,vic s dng
captcha có th gây khó  cho mt vài i ng i dùng và làm h khó
chu.
Các thông báo xác nhn  ng dc s dng,ví d  vic hin th mt thông
báo xác nhn "bn có mun xóa hay k"  làm hn ch các  thut
d. S  token
To ra mt token  ng vi mi form,token này s là duy nht i vi moit6
4
form và ng thì hàm to ra token này s nhn i s là"session".Khi nhn lnh
http post v,h thng s thc hiên so khp giá tr token này  quyt nh có thc
hin hay k.
Mt s framework hin nay  h tr to token  là: aspnet webform,ruby on
rails,django

 là mt n mã Ruby to token session ca i dùng.Token này dc to t
1 sesstion và 1 "secretekey" ( khóa bí mt-do i xây ng dng to ra )

n mã trên s dng  thc POST  thc hin thao tác xóa ng th
i nó
 hin th thông b hi i dùng phi xác nhn.Nó còn s dng thêm 1
"authenticity_token".
Bên phía máy chc khi thc hin  thc "xóa" theo 1 n mã trên thì

 trình s kim tra xem câu lnh http gi n có phi là post k
f. S  cookie riêng  cho  quan 
Mt cookie k th dùng chung cho các domain khác nhau,chính vì vy vic s d
ng
"admin.site.com" thay vì s dng" site.com/admin" là an toàn 
g.     log và k tra ip
Mt vài framework ghi tt c thông tin,d liu x lý vào các file log.
u này rt
nguy him nu   là các thông tin nhy cm  mt khu ,s tài khon.
Mt s h thng quan trng ch cho truy cp t nhng IP dc thit lp sn
2.3. 
2.3.1
DoS (Denial of Service) có th mô t n nhi
dùng hp pháp ca mt dch v p và s dng dch v 
gm c vic làm tràn ngp mng, làm mt kt ni vi dch vi
cùng là làm cho server không th c các yêu cu s dng dch v t các
client. DoS có th ng ca mt máy tính, mt mng ni b, thm
chí c mt h thng mng rt ln. Thc cht ca DoS là k tn công s chim dng
mng ln tài nguyên m nht kh 
lý các yêu cu dch v n t các client khác.
2.3.2. :
 Phá hoi da trên tính gii hn hoc không th phc hi ca tài nguyên
mng
a. Thông qua kt ni ( Tn công kiu SYN flood )






×