Skip to content

Веб апликэшний нууцлал хамгаалалт

December 1, 2006

Хэн ч бай, зөвхөн зөвшөөрөгдсөн
үйлдлээ л хийж байх системийг
нууцлал хамгааглалттай гэнэ.


Аливаа зүйлийн давуутай шинж чанар нь өөр нэгэн өнцгөөс харахад сул тал нь болж байдгийг хаа сайгүй олж харж болно. Тухайлбал вэб апликэшний хувьд хаанаас ч хэзээ ч хандаж ашиглаж болдог давуу тал нь, хэн дуртай нэгэнд ямар нэг гажууд хэлбэрээр хандах боломжыг олгодог. Хэрвээ өөрийн компьтер дээрээ л суулгаад өөрөө л хэрэглэдэг жирийн програмын хувьд бол гаднаас халдах халдлагаас айгаад байх зүйлгүй. Интэрнэтгүй, сүлжээгүй орчинд ч ажиллах учраас. Харин интэрнэт хэмээх задгай ертөнцөд байрлах вэб апликэшний хувьд бол нууцлал хамгаалалт гэдэг асуудал хамгаас чухалд тавигддаг. Ийм учраас эхлээд гаднах нууцлалыг хангаад дараа нь дотрох зүйлсээ хийдэг. Ингээд хүн бүхний мэдэх зүйлийг бичихээ зогсоод гол зүйлдээ орьё.

Апликэшн байгаа сервэрийнхээ орчний нууцлалыг хангалгүйгээр апликэшнээ яаж ч сайн хийгээд нэмэргүй. Сэрвэрийн хувьд ерөнхийдөө дараах зүйлсийг анхаарах хэрэгтэй.

Сэрвэр

  • Сэрвэрийн үйлдлийн системийн шинэчлэл, апдэйтийг цаг тухайд нь хийж байх. Мөн үйлдлийн системийн чухал багц програм хангамжуудыг ч байнга шинэчилж байх хэрэгтэй. Харгалзах мэйл листүүдэд нь бүртгүүлчих юм бол амар байдаг.
  • Хэрэггүй буюу ашигладаггүй сэрвисүүдийг зогсоохь эсвэл бүр устгах. Жишээ нь Windows дээр бол Messenger, Fax service, Net logon гэх мэт. Юникс дээр бол apmd, lpd, sendmail, telnet, finger гэх мэт сэрвисүүд бараг ашиглагдахгүй болов уу.
  • Хэрэггүй үйлдлийн систэмийн хэрэглэгч нэрсийг устгах. Тухайлбал windows дээр guest хэрэглэгчийг идэвхгүй болгох. Мөн хэрэглэчдийн нууц үгийг тогтмол хугацаанд солиж байхаар тохируулах, хамгийн багадаа 8 ч юмуу тэмдэгт байхаар зааж өгөх.
  • Файл болон директоруудад хандах эрхийг(file permission) нарийн чанд тавьж өгөх. Системийн файлууд, директоруудыг сайтар нууцлаж хамгаалах хэрэгтэй.
  • Логуудыг сайтар төлөвлөж тохируулах. Лог файлын үүсэх байрлал, хэд хоноод хуучин логууд устгагдах гэх мэт. Мөн лог дээр бичигдэх байгаа үзэгдлүүдийг автоматаар шинжилж, хэвийн бус зүйл илэрвэл мэйлээр ч юмуу мэдэгддэг байвал тун сайн.
  • Сүлжээний тохиргоонд TCP/IP түвшинд боломжын хирээр шүүлтүүр тавьж өгөх. Хэрэггүй портуудыг хаах, iptables дээр сэжигтэй пакетуудыг оруулахгүй байх гэх мэтээр тохируулж болдог.

Апликэшн сэрвэр

  • Апликэшн сэрвэр буюу вэб сэрвэрээ байнга шинэчилж засвар эмчилгээг цаг тухайд нь хийж явах.
  • Апликэшн сэрвэрийг ажиллуулах хэрэглэгчийн нэрийг логин хийж чадахааргүй байлгах. мөн маш хязгаарлагдмал эрхтэйгээр тохируулж өгөх. Тухайлбал вэб апликэшний директориос бусад дирэктор луу хандах эрхгүй байлгаж болно.
  • Хэрэглэгдэхгүй нэмэлт боломжуудыг идэвхгүй болгох. Тухайлбал CGI програм ажиллуулахыг зогсоох, мөн HTTP ийн PUT, TRACE, DELETE зэрэг мэтодуудыг идэвхгүй болгох гэх мэт.
  • Вэб сэрвэрийн нэр болон хувилбарын дугаар, алдааны мэдээлэл зэргийг нуух. Ингэснээр гаднаас халдагчид сэрвэрийн програм хангамж болон бусад мэдээлэл дээр тулгуурлан онгорхой цоорхойг хайхаас сэргийлнэ.

Хөгжүүлэлт

Ингээд ерөнхийдөө сэрвэр болон бусад програм хангамжуудын тохиргоог боломжын хэмжээнд хамгаалж чадсан гэж үзвэл бид апликэшнээ хийхдээ анхан шатанд юуг анхаарвал зохихыг авч үзье.

Програмд гаднаас орж ирэх өгөгдлийг зөв байгаа эсэхийг шалгах хэрэгтэй.

  • SQL Injection. Энэ нь ерөнхийдөө махан дотор эм хийгээд нохойд өгөх гэдэг Шурикийн аргатай адил. Хэрэглэгчийн оруулсан өгөгдлийг шалгалгүйгээр шууд SQL команд дотор оруулж хэрэглэх юм бол махыг эмтэй нь идчихлээ гэсэн үг. Эмийг махнаас ялгахын тулд хэрэглэгчийн оруулсан өгөгдөл дотор SQL байна уу үгүй юу шалгаж үзэх хэрэгтэй. Эсвэл prepared statement ийг хэрэглэнэ.
  • OS Command Injection. Дээрхтэй төстэй, гэхдээ энэ тохиолдолд хэрэглэгчийн оруулсан өгөгдлийг тэр чигээр нь үйлдлийн системийн комманд дотор хэрэглэх тохиолдол юм. Тухайлбал хэрэглэгч оруулж байгаа өгөгдөл дотроо эвийг нь олоод “rm -rf /” гээд оруулчих юм бол нилээд том асуудал үүснэ. Иймд хэрэглэгчээс орж ирж байгаа өгөгдлийг үйлдлийн системийн команд дотор ашиглах бол сайн шалгах хэрэгтэй.
  • Directory traversal. Хэрэглэгчээс орж ирэх өгөгдлийг файлын нэр болгож хэрэглэх үед системийн чухал мэдээлэл агуулсан файл руу хандах аюул гарч болзошгүй. Жишээ нь ../../../../../etc/passwd гэж оруулж болно гэдгийг тооцоолох хэрэгтэй. Энэ тохиолдолд вэб сэрвэрийг зөв тохируулаагүй байх юм бол хорон санаатан чухал мэдээлэлд халдах болно. Иймд гаднаас орж ирж байгаа файл болон директорын нэрэн дотор ../ гэх мэт сэжигтэй зүйлс байх вий шалгаарай.
  • Параметр болон hidden field дээр хуурамч утга тавиж ашиглах. Үүнийг хаахын тулд html формоор орж ирж байгаа field үүд болон, URL ээр дамжиж ирж байгаа параметрүүдийн авах утгын хязгаар болоод, өгөгдлийн төрөл, форматыг шалгаж байхаас гадна. Програмын логик урсгалтай нийцэж байгаа эсэхийг ч чанд шалгах нь зүйтэй.
  • Cross Site Scripting(XSS). Хэрэглэгчийн оруулсан өгөгдөл дотор Javascript явж байвал xss гэж үзнэ. Хэрэглэгчийн оруулсан өгөгдөл доторх HTML элэмэнтүүдийг энкодлож гаргах юм бол Javascript ажиллахгүйгээр дэлгэц дээр харагдах юм. Гэхдээ зарим тохиолдолд хэрэглэгчдийг html өгөгдөл оруулахыг зөвшөөрөх тохиолдол гарна. Үүнийг зогсоохын тулд оролт дотор <script> -гэсэн маягийн зүйл байгаа эсэхийг шалгаж болно.
  • Шиншлэх. Энгийн HTTP ээр дамжиж байгаа өгөгдөл нь сүлжээгээр техт хэлбэрээрээ явах тул ямар нэг сүлжээний шиншлэх багажаар(sniffer) ямар өгөгдлүүд явж байгааг мэдчихэж болдог. Ийм учраас хэрэглэгчийн нэр, нууц үг гэх мэт мэдээллийг энкрифтлэгдсэн хэлбэрээр дамжуулах хэрэгтэй. Тухайлбал логин хийдэг хуудсыг SSL(Secure Socket Layer) -ээр дамжихаар хийх хэрэгтэй. Мөн session timeout-ийг багасгах зэргээр sessionid-ийг хулгайлах, ашиглахаас сэргийлж болох юм. Энэ арга нь sessionid-ийг хулгайлагдах болон таагдахаас бүрэн хамгаалж чадахгүй ч учрах хохирлыг тодорхой хэмжээнд багасгах юм.
  • Cross Site Request Forgeries(CSRF). Энэ нь зөвшөөрөлтэй хэрэглэгчийн үүсгэсэн session-ийг ашиглан тухайн хэрэглэгчийн хүсээгүй зүйлийг өөрт нь мэдэгдэхгүйгээр хийх арга юм. Энэ халдлагаас сэргийлэхийн тулд хэрэглэгчийн үйлдлийг зөвхөн sessionid-д нь итгэж биелүүлэх биш форм дотор нэмэлт талбар оруулж түүнийгээ sessionid-тай хавсаргаж хэрэглэж болно. Эсвэл ямар нэг үйлдэл хийхийн өмнө заавал хэрэглэгчээс лавлагаа зөвшөөрөл авч байж гүйцэтгэдэг байх.

Багаж

Вэб апликэшн хөгжүүлэлтийн үед нууцлалын тал дээр анхаарах зүйлс дээр дурдсан хэдээр тогтохгүй. Нууцлал хамгаалалтыг хангана гэдэг нь чанарыг сайжруулж байна гэсэн үг бөгөөд хэдий чанартай хийнэв төдий чинээ хөлс хүч, цаг хугацаа зарцуулагдана. Хөлс хүч, цаг хугацааг бага байлгаад өндөр чанартай хийнэ гэдэг хэцүү ч, сайн багаж хэрэгсэл, багцуудыг ашигласнаар нууцлалыг боломжын хэмжээнд байлгаж болно. Тухайлбал олны танил болсон Struts хэмээх MVC фрэймворкын Validator нь гаднаас орж ирэх өгөгдлийг дажгүй сайн шүүдэг. Вэб аппликэшнээ хэвээр орхиод Web Application Firewall(WAF) -оор гаднаас орж ирэх халдлагыг хаах бас боломжтой. Жишээ нь Apache вэб сэрвэрт зориулагдсан ModSecurity гэдэг нээлттэй эх бүхий WAF байдаг. Гэхдээ энэ тохиолдолд тухайн WAF-ийг суурилуулах, хэрэглэж тохируулж сурахаас авахуулаад нэмэлт ажлууд гарна. Эдгээр ажлууд нь вэб аппликэшн дээрээ засвар оруулахаас хямд байвал хэрэглэх нь зүйтэй.

Ингээд вэб апликэшн маань нууцлал хамгаалалтыг тодорхой түвшинд хангасан эсэхийг шалгахын тулд Вэб апликэшний нууцлалыг шалгагч(Web Application Security Scanner) багажаар шалгаж үзэх хэрэгтэй. Ийм төрлийн багажууд нь хэдэн мянган зүйлтэй шалгах листтэй байх бөгөөд түүгээрээ апликэшнийг чинь бөмбөгдөж өгнө. Ингээд ямар шалгууруудыг давахгүй байгааг илрүүлэх юм. Сайн багаж бол ямар шалгуурыг даваагүй болох, тухайн дайралт нь хир ноцтойгоор ашиглагдаж болох, яаж засаж залруулах мэдээллийг агуулсан байдаг.

Холбоосууд:

No comments yet

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: