Monday, April 15, 2013

ဟက်ကာ ပရိုဂရမ်မာနှင့် ဒစ်ဂျစ်တယ်ခံတပ်

၁။ ဆိုင်ဘာလုံခြုံရေး နှင့် ဟက်ကာအရွေ
၂၀၁၀ လာက်ကစပြီး အမေရိကန်အစိုးရ အဂျင်စီတွေ နဲ  Google အပါအ၀င် ကာ်ပိုရေးရှင်းကြီးတွေရဲ့ ကွန်ပြူတာစနစ်တွေ မကြာခဏ ဖာက်ထွင်းတိုက်ခိုက်ခံနေရတာ မိတ်ဆွေတို  အားလုံး သိပြီးဖြစ်ပါတယ်။ ဒီ ဆိုင်ဘာ (cyber) တိုက်ခိုက်မှုတွေကို လုပ်ဆောင်တဲ့သူတွေကတော့ သူတို ကိုယ်သူတို  ‘မျိုးချစ်ဟက်ကာများ’ လို  ရည်ညွှန်းကြလေရဲ့။ မျိုးချစ်ဟက်ကာ ဆိုလို  ဘယ်လို ပုဂ္ဂိုလ်တွေပါလိမ့်ဆိုပြီး ဇာစ်မြစ်လိုက်ကြည့်တော့ “အားလုံး သိတော်မူကြတဲ့အတိုင်း ပါပဲခင်ဗျာ” လို ပဲ ဆိုရပါတော့မယ်။ ထားပါတော့ဗျာ။ ဒီဆောင်းပါးက အဲဒီလို မျိုးချစ်ပုဂ္ဂိုလ်ကြီးတွေနဲ  မိတ်ဆွေဖြစ်ရတာထက်၊ လူ ကျင့်၀တ် စာင့်ထိန်းလိုက်နာသူတွေ၊ လူ သိက္ခာ တန်ဘိုးထားသူတွေ၊ လူ  တန်ဘိုးကို လးစားနားလည်သူတွေနဲ  ရန်သူဖြစ်လိုက်ရတာကမှ ပိုကောင်းဦးမယ် ဆိုတဲ့ အကြောင်းမဟုတ်တဲ့အတွက်ပေါ့။ ကျွန်တော်တို ဆွးနွေးမှာက ကွန်ပြူတာစနစ်ရဲ့ လုံခြုံရေး နဲ ပတ်သက်တဲ့ အကြောင်းပါ။
မိတ်ဆွေတို အားလုံးသိကြတဲ့ ၀ီကီလိခ်စ် (WikiLeaks) မှာတင်လိုက်တဲ့ အမေရိကန် သံတမန်ရေးရာ အချက်အလက် နှစ်သိန်းခွဲကျော်ကို အာင်အောင်မြင်မြင် ဖါက်ထွင်း ခိုးယူနိုင်ဖို  အဲဒီမျိုးချစ်ပုဂ္ဂိုလ်ထူးတွေရဲ့ အရပ်ဖက် စစ်ဖက် ဆိုင်ရာ တာ၀န်ရှိသူဆွေကိုယ်တိုင်က ငွကြေးနဲ  နည်းပညာပါ ၀ိုင်း၀န်းကူညီခဲ့ကြတယ်ဆိုပဲ။ ဒါ့အပြင် ၂၀၀၈ တုန်းကလည်း အဲဒီမျိုးချစ်ပုဂ္ဂိုလ်တွေရဲ့စစ်တပ်နဲ ဆက်စပ်နေတဲ့ ဟက်ကာတွေက ၅၀-mega byte လာက်ရှိတဲ့ email အချက်အလက်တွေ၊ user name နဲ  password တွကို အမေရိကန်အစိုးရအေဂျင်စီတွေရဲ့ ကွန်ပြူတာစနစ်ထဲက ဖာက်ထွင်းခိုးယူခဲ့ကြတယ်။
အဲဒီတော့ ပာချင်တာက ဒီနေ ခတ်မှာ “ဟက်ကာဆိုတာ လူမသိ သူမသိ နရာတနေရာရဲ့၊ ရှုပ်ပွနေတဲ့ အခန်းတခန်းထဲက၊ ကွန်ပြူတာ လးငါးဆယ်လုံးဘေးမှာ အလုပ်ရှုပ်နေတဲ့၊ သူ၀ါသနာပါရာ စိတ်၀င်စားရာကို စမ်းသပ်နေတဲ့ မျက်မှန်ထူ  ခါင်းမွေးစုတ်ဖွား ဂုရုကြီး” မဟုတ်တော့ပါဘူး။ “နိုင်ငံတနိုင်ငံ ဒါမှမဟုတ် အဖွဲ  အစည်းတခု ရဲ့ နိုင်ငံရေး စီးပွားရေး လူမှုရေး လုံခြုံရေး တို နဲ  ပတ်သက်ပြီး လွှမ်းမိုးခြိမ်းခြောက်နိုင်လောက်တဲ့ အဆင့်ထိရှိအောင်၊ ရည်ရွယ်ချက်ရှိရှိနဲ  စနစ်တကျ၊ ဖွဲ စည်းထားတဲ့ တိုက်ခိုက်ရေးအဖွဲ တခု” အဖြစ် အသွင်ပြောင်း ရွ  လျားလာပါပြီ။
၂။ ဟက်ကာနှင့် ပရိုဂရမ်မာ၏အခန်းကဏ္ဌ
အခုလို သတင်းအချက်အလက်ခေတ်ကြီးထဲမှာ နိုင်ငံတနိုင်ငံ အဖွဲ  အစည်းတခုရဲ့ လုံခြုံမှုဟာ အဲဒီနိုင်ငံ အဲဒီအဖွဲ  အစည်းရဲ့ ကွန်ပြူတာစနစ်တွေ ဘယ်လောက် လုံခြုံသလဲ ဆိုတဲ့ အပေါ်မှာ မူတည်လာပါတယ်။ [“ဒို ကတော့ အားလုံး manual ပဲဟေ့” ဆိုတဲ့ နိုင်ငံတွေ အဖွဲ အစည်းတွေ အတွက်တော့ မပြောတတ်ဘူးပေါ့ခင်ဗျာ။] ဒါကြောင့်မို  အုပ်စုဖွဲ ကျူးလွန်တဲ့ ရာဇ၀တ်မှု (organized crime) ဆန်ဆန် ဆိုင်ဘာတိုက်ခိုက်မှုတွေကို ခုခံကာကွယ်ဖို  ကိုယ့်ရဲ့ ကွန်ပြူတာစနစ်ကို လုံခြုံအောင်လုပ်ဖို  ဘယ်လောက်အရေးကြီးမယ်ဆိုတာ မိတ်ဆွေတို  မှန်းဆကြည့်နိုင်ပါတယ်။ ဒီလိုလုပ်ဖို  အတွက် ကွန်ပြူတာစနစ် တစ်ခုလုံးမှာပါတဲ့ hardware, software, netware, ဆက်သွယ်ရေးစနစ်၊ စီမံခန် ခွဲ အုပ်ချုပ်ပုံ စတဲ့ အလွှာတွေ အားလုံး အချိုးညီညီ ပူးပေါင်းလုပ်ဆောင်ရပါမယ်။
Fig: Defense in Depth Layers
ဒီဆောင်းပါးမှာတော့ ကျွန်တော်တို ဟာ software နဲ  ဆိုင်တဲ့ အပိုင်း၊ ပိုပြီးတိတိကျကျ ပာရရင် ကျွန်တော်တို  လုံခြုံအောင်လုပ်ရမယ့် ကွန်ပြူတာစနစ် ကြီးထဲမှာ အစိပ်အပိုင်းတခုအဖြစ် ပါ၀င်နေတဲ့၊ web application ဆာဖ့်၀ဲတွေ web page တွ ရးသားတဲ့ programming အပိုင်းကိုသာ အဓိကထား ဆွးနွေးသွားမှာဖြစ်ပါတယ်။ ပုံမှာ ပထားတဲ့အတိုင်းဆိုရင် application layer ကနေ data layer ကို ဟက်ကာ တွ ဘယ်လို ဖါက်ထွင်း၀င်ရောက်ကြတယ် ၊ ဒါဟာ application layer ရဲ့ ဘယ်လိုအားနည်းချက်တွေကြောင့်ဖြစ်တယ်၊ အဲဒီအားနည်းချက်တွေကို ဘယ်လိုပြုပြင်မယ် ဆိုတာကို အကျဉ်းချုံးပြီး တင်ပြမှာပါ။
တကယ်တော့ စ့စပ်သေချာပြီး ကျွမ်းကျင်လိမ္မာတဲ့ ပရိုဂရမ်မာတစ်ရောက်ဟာ၊ ဟက်ကာတစ်ရောက်ရဲ့ application-layer ကတဆင့် ဖာက်ထွင်းခိုးယူ (hack) နိုင်မယ့် လမ်းကြောင်း တာ်တော်များများကို ပိတ်ဆို ဟန် တားနိုင်စွမ်း ရှိပါတယ်။
ဒါကြောင့်မို  web application တွ web page တွကတဆင့်၊ ဟက်ကာတွေ ဘယ်လို hack လုပ်သလဲဆိုတာ အကြမ်းဖျဉ်းသဘောပေါက်ဖို  မိတ်ဆွေအနေနဲ  programming အခြေခံလောက်နဲ  structure query language အခြေခံလောက် တာ့ရှိထားသင့်ပါတယ်။
တကယ်တော့ ဟက်ကာဆိုတာ
• Platform knowledge (Unix, Linux, Solaris, Mac, Windows စတဲ့ OS တွ နဲ  ပတ်သက်တဲ့ ကျွမ်းကျင်မှု)
• Network knowledge (ကွန်ပြူတာကွန်ရက်ဆက်သွယ်ရေး နည်းပညာတွေနဲ  ပတ်သက်တဲ့ ကျွမ်းကျင်မှု)
• Security knowledge (ကွန်ပြူတာစနစ်တွေရဲ့ လုံခြုံရေးနဲ ပတ်သက်တဲ့ ကျွမ်းကျင်မှု)
• technical knowledge ( programming language ပါင်းစုံ၊ အထူးသဖြင့် Assembly, C စတဲ့ low level  တွနဲ  scripting language တွကို ကျွမ်းကျင်မှု) စတာတွေရှိထားတဲ့ သူတွေပါပဲ။
တကယ့် professional programmer / developer တွလည်း အဲဒီ အသိပညာတွေနဲ ပတ်သက်ရင် အားလုံးကို အနဲဆုံး အခြေခံအဆင့်လောက်တော့ တီးမိ ခါက်မိတဲ့ သူတွေချည်းပဲ ဖစ်ပါတယ်။ programmer / developer တွဆိုတော့လည်း technical knowledge ဘက်ကိုပဲ ပိုအားသန်တာပေါ့။ ဒါပေမယ့် တခြား နယ်ပယ် သုံးခုကလည်း ကိုယ်နဲ  သိပ်မစိမ်းလှတဲ့အတွက်၊ နည်းနည်း ပါးပါး အားဖြည့်လိုက်ရင် ‘မြွှေ မွချင်း ခမြင်’ နိုင်တဲ့ သူတွေ ဖစ်လာကြမှာပါ။
၃။ တိုက်ပုံခိုက်ပုံ နည်းပေါင်းစုံ
ကွန်ပြူတာစနစ်တွေကို ဟက်ကာတွေရဲ့ ဖာက်ထွင်း ၀င်ရောက် တိုက်ခိုက်ပုံတွေကို အဓိကအုပ်စုကြီးတွေအဖြစ်ခွဲလိုက်ရင်
• Operating System Attacks (OS ရဲ့ အားနည်းချက်တွေကို ရှာဖွေတိုက်ခိုက်တာ။)
• Application-Level Attacks (error checking/testing အားနည်းခဲ့တဲ့ အသုံးချဆောဖ့်၀ဲ တွ ကတဆင့် တိုက်ခိုက်တာ။)
• Shrink Wrap Code Attacks (OS၊ အသင့်သုံး library, အသင့်သုံး application, စတာတွေမှာ ပါတဲ့ script တွ configuration တွကို ကိုယ်လိုချင်တဲ့ပုံစံ ချိန်ညှိမှုပြုလုပ်မထားရင် default setting/value တွပဲဖြစ်နေမယ်။ default value က ဘာဆိုတာ သူသူ ငါငါ အလွယ်တကူ သိနိုင်တဲ့အတွက် ဟက်ကာက ကိုယ့်ရဲ့ system ကို အလွယ်တကူ ထိုးဖောက်တိုက်ခိုက် နိုင်တယ်။ အဲဒီလိုပုံစံတိုက်ခိုက်မှုကို ခါ်တာ။ )
• Misconfiguration Attacks (file permission တွနဲ  ပတ်သက်ပြီး ပာင်းပစ်တာ၊ “ရှုပ်ပါတယ်ကွာ fire-wall ကြီး off ပစ်စမ်းပါ” “UAC - User Account Control ကြီး ပိတ်ပစ်စမ်းပါ” ဆိုတာတွေ၊ “ ‘remember me’ ဆိုတာလေး ချစ် (tick) ထားလိုက်ဟေ့” စတဲ့ system နဲ  ပတ်သက်ပြီး မှားယွင်းတဲ့ configuration တွ လုပ်မိလို  ကိုယ့် system က မလုံခြုံတော့ပဲ ဟက်ကာက အလွယ်တကူ ၀င်ရောက်တိုက်ခိုက်နိုင်တာ)
ဆိုပြီး အုပ်စုကြီး ၄-စု အဖြစ် ခွဲခြားနိုင်ပါတယ်။ အဲဒီထဲမှာမှ ကျွန်တော်တို ဟာ application level attack အပိုင်းကိုသာ လ့လာမှာပါ။
အဲဒီအပိုင်းကလည်း အတော်လေးတော့ ကျယ်ပြန် ပါတယ်။ application level attack အပိုင်းမှာ ဟက်ကာတွေ အများဆုံးသုံးတဲ့ တိုက်ခိုက်နည်းစနစ်တွေ ကတော့ SQL Injection attacks, Buffer overflow attacks, Cross-site scripting, Active content, Denial of service and SYN attacks နဲ  Malicious bots တို ပါ့။ ဒါတွေအပြင် တခြားထင်ရှား အသုံးများတာတွေကတော့ Phishing, session hijacking, Man-in-the-middle attack, Parameter/Form tampering နဲ  directory traversal attacks စတာတွေဖြစ်ပါတယ်။
၄။ SQL Injection Attack
၂၀၁၀ ဒီဇင်ဘာတုန်းက၊ အမေရိကန် နူးရော့ခ် အခြေစိုက် CitySights ကုမ္ပဏီရဲ့ မိခင်ကုမ္ပဏီဖြစ်တဲ့ Twin America ဟာ၊ သူတို customer တစ်သိန်းနီးပါးရဲ့ အကြွေး၀ယ်ကဒ်နံပါတ်တွေအပါအ၀င် ပုဂ္ဂိုလ်ရေးအချက်အလက်တွေ ခိုးယူခံလိုက်ရတယ်။ အဲဒီဖြစ်စဉ်မှာ ဟက်ကာတွေ သုံးတဲ့နည်းက SQL Injection နည်း။
နောက်တခါ အမေရိကန်သမိုင်းမှာ အကြီးမားဆုံး အချက်အလက်ခိုးယူမှု (identity theft) တခုဖြစ်တဲ့၊ credit ကဒ် နဲ  debit ကဒ် နံပါတ်ပေါင်း သန်း ၁၃၀ ကျာ် ခိုးယူခံရမှုမှာ ကျူးလွန်ခဲ့တဲ့ ဟက်ကာ အဲလ်ဘတ် ဂွန်ဇာလက် (Albert Gonzalez) သုံးတဲ့ နည်းကလည်း SQL Injection။
ဒါကြောင့် ဒီ SQL Injection attack ဆိုတာ internet ပါ်မှာ website တွအများဆုံး တိုက်ခိုက်ခံရတဲ့ နည်းစနစ်အမျိုးအစား ဆိုတာ ရှင်းရှင်းလင်းလင်း ထင်ထင်ရှားရှား သိနိုင်ပါတယ်။ အဲဒီမှာ ခက်တာက “ဟက်ကာတွေ ဒီလိုတိုက်ခိုက်နိုင်တာဟာ database ရဲ့ အားနည်းချက်ကြောင့်လည်းမဟုတ်၊ web server ရဲ့ အားနည်းချက်ကြောင့်လည်း မဟုတ်ပဲ၊ web application ရဲ့ အားနည်းချက်ကြောင့်သာဖြစ်တယ်” ဆိုတာကို ပရိုဂရမ်မာ အများစုက အခုထက်ထိ ကာင်းကောင်း မသိကြသေးတာပဲ။
၄.၁။ SQL Injection ဆိုတာ ဘာလဲ
web application တစ်ခုရဲ့ web page တွမှာ keyboard ကနေ တိုက်ရိုက် data ရိုက်ထည့် နိုင်တဲ့ input textbox တွဆိုတာရှိမြဲဖြစ်ပါတယ်။ မိတ်ဆွေတို ရဲ့ facebook တို  Gmail တို ကို သုံးဖို  registration လုပ်ရသလိုမျိုး။ login ၀င်ဖို  user name နဲ  password ရိုက်ထည့်ရသလိုမျိုးပေါ့။
အဲဒီလို ရိုက်ထည့်လိုက်တဲ့ user input value တွကို database မှာ သွားပြီး သိမ်းချင်သိမ်းမယ် (insert, update)။
ဒါမှမဟုတ် အဲဒီ input value တွကို အခြေခံပြီး database ထဲက data ကို ဆွဲထုတ်ချင်ထုတ်မယ် (select)။
အဲဒီတော့ အဲဒီ input textbox တွဟာ database ရဲ့ ၀င်ပေါက်တွေ ဖစ်လာနိုင်တဲ့ နရာတွေ။
အဲဒီနေရာတွေကနေ ဟက်ကာတွေက သူတို  လိုချင်တဲ့ပုံစံ sql script တွ ရိုက်ထည့်လိုက်တယ်။
Web application က အဲဒီလို ရိုက်ထည့်လိုက်တဲ့ input value တွကို၊ ထာင့်ပေါင်းစုံကနေပြီး ဟာကွက်မရှိအောင် စစ်ဆေးမထားပဲ၊ query string တခုအဖြစ် database မှာ သွားပြီး execute လုပ်လိုက်တဲ့အခါ၊ အဲဒီ database ကို ထိမ်းချုပ်နိုင်စွမ်း ဒါမှမဟုတ် အဲဒီ database ထဲက အချက်အလက်တွေဟာ၊ ဟက်ကာလက်ထဲ ရာက်သွားရပါတော့တယ်။
ဒီဖြစ်စဉ်ကိုကြည့်မယ်ဆိုရင် SQL Injection နည်းနဲ  တိုက်ခိုက်ခံရမှုမှာ အဓိက တာ၀န်ရှိသူဟာ web programmer/developer ပဲ ဆိုတာ ငင်းလို မရပါဘူး။
အဲဒီလို SQL Injection နည်းနဲ  ဟက်ကာတွေဟာ အာက်ပါတိုက်ခိုက်မှုပုံစံ တွကို လုပ်ဆောင်ကြပါတယ်။
• Authentication Bypass (login စစ်ဆေးမှုတွေကို ဖတ်ကျော်ခြင်း)
• Information Disclosure (လျှို ၀ှက်အချက်အလက်တွေကို ဖွင့်ချခြင်း)
• Compromised Data Integrity (web page သို မဟုတ် database ထဲက အချက်အလက်တွေကို အစားထိုး/ပုံဖျက်/ပြောင်းလဲ ပစ်ခြင်း)
• Compromised Availability of Data (web page သို မဟုတ် database ထဲက အချက်အလက်တွေကို ဖျက်ပစ်ခြင်း)
• Remote Code Execution (web application, web server, database server တို  run နတဲ့ host operating system ကို တိုက်ခိုက်ခြင်း)
စတာတွေ ဖစ်ပါတယ်။
၄.၂။ SIA တိုက်ခိုက်မှုပုံစံ - ၁ (စစ်ဆေးမှုကို ကျာ်လွှားခြင်း)
-web site တခုကို သုံးဖို  login ၀င်တဲ့အခါ user name နဲ  password ရိုက်ထည့်ရပါမယ်။
-အဲဒီ information ကို အခြေခံပြီး sql query တစ်ခု ကို ဖန်တီးတည်ဆောက်မယ်။ ပီးရင် database ရဲ့ UserTable ထဲက သူနဲ  ကိုက်ညီတဲ့ row ကိုဆွဲထုတ်မယ်။ ဒါမှမဟုတ်လည်း သူနဲ ကိုက်ညီတဲ့ row အရေအတွက်ပေါ့။
-row အရေအတွက် zero ဆိုရင် login မအောင်မြင်ဘူး။ zero ထက်ကျော်ရင် တာ့ OK ပီ။ main page ကိုသွား။
အဲဒီ business logic အတွက် လိုအပ်တဲ့ [အသေးစိပ် coding တွကိုတော့ ကျမ်းလေးအံ့စိုး၍ ချန်လှပ်ခဲ့ပါတယ်။] query ကို programmer က ဟာဒီလို တည်ဆောက်လိုက်တယ်။
String queryStr = “SELECT COUNT(*) FROM Users
WHERE UserName =’” + txtUserName.Text +
“’ AND Password = ‘” + txtPassword.Text + “ ’ ”
ပြီးရင် အဲဒီ query string ကိုသုံးပြီး command object တခု တည်ဆောက်။ နာက် command.Execute() ဘာညာပေါ့။
အဲဒီလို အခြေအနေမျိုးမှာ ဟက်ကာ က login page ရဲ့ user name အတွက် ပးထားတဲ့ text box ထဲမှာ Bla’ OR 1=1 - -
ဆိုပြီး ရိုက်ထည့်လိုက်တယ်။ password အတွက်က ကြုံရာ စာသားတခု ဒါမှမဟုတ် အလွတ်ပဲထားလိုက်တယ်။
အဲဒီအခါ database မှာ execute လုပ်မယ့် query က ဟာဒီလို ဖစ်လာမယ်။
SELECT COUNT(*) FROM Users WHERE UserName = ‘Bla’ OR 1=1 -- AND Password = ‘Bla’
ဒါဆိုရင် sql အခြေခံလောက်ပဲသိထားဦးတော့ မိတ်ဆွေတို သဘောပေါက်ပါပြီ။
-- သငေ်္ကတ က နာက်က statement အားလုံးက မှတ်ချက်(comment) ဖစ်သွားပြီဆိုတော့ AND logic ကို ထည့်စဉ်းစားစရာမလိုတော့ဘူး။
UserName က Bla ဖစ်ရင်ဖြစ်၊ မဖြစ်ရင် ၁ နဲ  ၁ ညီရင် ရပြီဆိုတော့ ဒီ query ဟာ always true, none zero ပဲ return ပန်မယ်။ ဒါဆိုရင် ဟက်ကာ အနေနဲ  login စစ်ဆေးမှုကို အသာကလေး ကျာ်လွှားသွားပြီပေါ့။
၄.၃။ SIA တိုက်ခိုက်မှုပုံစံ -၂ (လျှို ၀ှက်အချက်အလက်များ ရယူခြင်း)
ဒီ sql injection attack ပုံစံကတော့ web application user ကို သူ စိတ်ကြိုက် ရှာဖွေခွင့်ပေးပြီး ရလာတဲ့ result ကို web page ပါ်မှာ ပန်ပြပေးရမယ့် business logic မျိုး ရးသားရာမှာ ဖစ်လေ့ရှိပါတယ်။
အမှန်တော့ user ကို သူသိချင် လိုချင်တဲ့ product တွနဲ  ပတ်သက်တဲ့ အချက်အလက်တွေကို ပရမှာပါ။ ဒါကြောင့် search text box မှာ user ရိုက်ထည့်လိုက်တဲ့ စာသားကို ယူပြီး database ( product table) မှာ အဲဒီလို အလားတူ product ရှိ မရှိ ရှာမယ်။ ပီးရင် user ကို ပန်ပြမယ်ပေါ့။ အဲဒါအတွက် query ကို ဟာဒီလို တည်ဆောက်လိုက်ရင်
String queryStr = “SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice FROM Products WHERE ProductName LIKE ” + txtSearch.Text;
ဟက်ကာက search text box မှာ
Bla’ UNION SELECT 0, username, password, 0 FROM Users - -
ဆိုပြီး ရိုက်ထည့်လိုက်တယ်။ ဒါဆို ဘာတွေ ဖစ်လာမလဲ ရှင်းပါတယ် user name နဲ  password တွ ဟက်ကာလက်ထဲရောက်သွားပြီပေါ့။ ဒီနေရာမှာ မိတ်ဆွေတို ဖက်က စာဒက တက်စရာတခုရှိမှာပါ။ “ဟက်ကာက ဘယ်လိုလုပ်ပြီး table name တို  column name တို  သိ သတုန်း” ပါ့။ အးဗျာ ဒီ hacking အကြောင်းကလည်း အသေးစိပ်ရေးမယ်ဆိုရင် “ကျမ်းတစောင် ပတဖွဲ ” ရးမှ ပည့်စုံမှာဆိုတော့ ဆာင်းပါးတပုဒ် နဲ တာ့ လိပ်ပတ်လည်အောင် ပည့်စုံအောင် မတင်ပြနိုင်ဘူးပေါ့။ အတိုချုပ်ဖြေရရင် hacking လုပ်တဲ့ အဆင့် ၅-ဆင့် ဖစ်တဲ့
1. Reconnaissance (ပြင်ဆင်ခြင်း၊ အချက်အလက်စုဆောင်းခြင်း အဆင့်)
2. Scanning (တိုက်ခိုက်မည့် target ၏ နည်းပညာပိုင်းဆိုင်ရာ အသေးစိပ် အချက်များ network information, computer name, port number, IP address, etc တို  ရယူခြင်း အဆင့်)
3. Gaining Access ( target သို  ထိုးဖေါက်၀င်ရောက်နိုင်သော အဆင့်)
4. Maintaining Access (ထိုးဖောက်၀င်ရောက်ထားသော target ကို ဆက်လက် ထိမ်းချုပ်ထားသောအဆင့်)
5. Covering Tracks (ခြေရာလက်ရာ ဖျာက်တဲ့အဆင့်)
ဆိုတဲ့ အဆင့်တွေထဲက ၁ နဲ  ၂ ပီးတာနဲ တင် table name တို  column name တို  ကို သိနိုင်တဲ့ အခြေအနေရောက်နေပြီ လို  အတိုချုပ် ဖပါရစေ။
၄.၄။ SIA တိုက်ခိုက်မှုပုံစံ - ၃ (insert/update/delete)
ဒီ sql injection attack နည်းနဲ  ပတ်သက်ပြီး  ပည့်စုံအောင်ဆွေးနွေးမယ်၊ တိုက်ခိုက်ပုံ case တခုချင်းစီအတွက် ဥပမာ coding တွနဲ  တင်ပြရမယ်ဆိုရင် ဒီဆောင်းပါး တစ်ပုဒ်နဲ ဘယ်လိုမှ မဖြစ်နိုင်ပါဘူး။ ဒါ့အပြင် မိတ်ဆွေတို ကိုလည်း နည်းပညာပိုင်းဆိုင်ရာ အသေးစိပ် အချက်အလက် တွနဲ  မလေးလံစေချင်တဲ့ အတွက် ဟက်ကာအနေနဲ  ကိုယ့်ရဲ့ database မှာ ဘယ်လို data အသစ်တွေထည့်နိုင်တယ်၊ ရှိပြီးသားတွေကို ဘယ်လို ပင်သွားနိုင်တယ် ဖျက်သွားနိုင်တယ် ဆိုတာကို အလွန်  အလွန် အတိုချုံးပြီး တင်ပြလိုက်ပါတယ်။
ဥပမာဗျာ Forgot password အတွက် ကိုယ့်ရဲ့ email ရိုက်ထည့်ရမယ့် text box လို နရာမျိုးက တဆင့် ဟက်ကာက
blah' ; UPDATE Customers SET customer-email = 'hacker@hacking.com' WHERE customer-email = 'original-user-name@orginal.com'; --'; စသည်ဖြင့် ရိုက်ထည့်ပြီး ကိုယ့်ရဲ့ အစစ်အမှန် မူလ email ကို ပာင်းသွားနိုင်ပါတယ်။
ဒါ့အပြင် blah' ; DROP TABLE Customers; --'; ဆိုပြီး table ကို ဖျက်သွားနိုင်သလို
blah' ; INSERT INTO Customers (column names here) VALUES ( values here); --'; ဆို ပီး သူအလိုရှိတဲ့ အချက်အလက်တွေ ထည့်သွားနိုင်ပါတယ်။
၄.၅။ SIA မှ ကာကွယ်ရန်
Query string အဖြစ်တည်ဆောက်မယ့် user input တွကို…
-Character string indicator တွဖြစ်တဲ့ Single quote, double quote တွ ပါ မပါ စစ်။
-Single line comment တွ ဖစ်တဲ့ double dash ( -- ) တို  hash/pound sign ( #) တွ၊ multi lines comment ( /*….*/ )တွေ ပါ မပါစစ်။
-စွယ်စုံသုံး plus sign (+) ကို စစ်။
-Wildcard character (%, *) တို ၊ semi-column ( ; ) စတဲ့ special character တွနဲ  ပတ်သက်ပြီး စစ်။
-Key words (and, &&, or, ||, not, !, select, union, insert, update, delete, etc) တွ နဲ  ပတ်သက်ပြီး စစ်။
၅။ Buffer Overflow တိုက်ခိုက်မှု
Memory ပါ်က နရာတစ်ခုမှာ သူလက်ခံနိုင်တဲ့ မမာဏထက်များတဲ့ data ထည့်မိတဲ့အခါမျိုးမှာ ဖစ်တတ်တဲ့ system error အမျိုးအစားတစ်ခုဖြစ်ပါတယ်။ ဒီ error ဟာ UNIX အခြေခံ OS တွ(UNIX, Linux) မှာရော၊ NT အခြေခံ Windows OS တွမှာပါ မကြာခဏ ဖစ်လေ့ဖြစ်ထရှိနေကြ error မျိုးပဲဖြစ်ပါတယ်။ ဒါဟာလည်း အဓိက အကြောင်းရင်းကတော့၊ ပရိုဂရမ်ရေးသားရာမှာ လိုက်နာကျင့်ဆောင်သင့်တဲ့ အလေ့အကျင့်ကောင်းတွေ ‘good programming practices’ ကို တိတိကျကျ လးလေးနက်နက် လိုက်နာမှုမရှိတာကြောင့်ဖြစ်ပါတယ်။ ဥပမာ အားဖြင့်ပြောရရင် တချို  developer တွဟာ ကိုယ့်ရဲ့ program/coding ထဲမှာ သုံးတဲ့၊ စာသားတွေ ကိန်းဂဏန်းတွေရဲ့ အများဆုံး လက်ခံနိုင်မှု ပမာဏ နဲ  ပတ်သက်ပြီး၊ သူတို ထဲကို data မထည့်မီ (assign မလုပ်မီ) ကာင်းကောင်း မစစ်ဆေးကြဘူး။ တချို ဆိုရင် အဲဒီ boundary value checking ကို လုပ်ရကောင်းမှန်းမသိပဲ ဖစ်စေ သိလျက်နဲ ဖစ်စေ လုံး၀ကျော်လွှားကြတယ်။
ဒါ့အပြင် တချို  programming language တွ ရဲ့ အသင့်သုံး library ကိုယ်တိုင်က အားနည်းချက် ရှိနေလို  ဒီ buffer overflow error ဖစ်ရတာပါ။ ဥပမာ C language မှာ ရှိတဲ့ strcat(), strcpy(), sprintf(), vsprintf(), bcopy(), gets(), scanf() စတဲ့ function တွဟာ buffer size ကို စစ်ဆေးမှုမရှိတဲ့အတွက်၊ အဲဒီ function တွကို ကိုယ့်ရဲ့ application ထဲမှာ ထာင့်ပေါင်းစုံက မစစ်ဆေးပဲ သုံးလိုက်မိရင် တချိန်မဟုတ်တချိန် buffer overflow error ဖစ်ဖို  အလားအလာ အလွန်များပါတယ်။
၅.၁။ BOF မှ ကာကွယ်ရန်
-ပရိုဂရမ်ဒီဇိုင်းဆွဲတုန်းထဲက လုံခြုံရေးအတွက် ထည့်သွင်းစဉ်းစားပါ။
-ဖြစ်နိုင်ရင် Type safe language (eg. Java) တွကိုပဲသုံးပါ။
-Stack Execution ကို disable လုပ်ထားပါ။ (ဒါကတော့ Solaris OS မှာပဲ ဖစ်နိုင်ပါတယ်။)
-အန္တရယ်ရှိတဲ့ function တွ(eg. gets(), strcpy() ) တတ်နိုင်သမျှ မသုံးပါနဲ ။
-(function ရဲ့) return address တွကို overwrite လုပ်ခွင့်မပေးပါနဲ ။
-အရေးကြီး အချက်အလက် (variables) တွကို overwrite လုပ်ခွင့်မပေးပါနဲ ။
-function တွကတဆင့် ပးလိုက်တဲ့ ရလာတဲ့ Argument/parameter တွကို အမြဲ စစ်ဆေးပြီးမှ သုံးပါ။ runtime checking ကို အမြဲ စ့စပ်သေချာစွာလုပ်ပါ။
-Coding တွကို ကာင်းစွာ စစ်ဆေး(test and debug) တဲ့အပြင် ပိုမို လုံခြုံစိတ်ချရတဲ့ compiler တွကိုပဲ သုံးပါ။
၆။ နိဂုံးအမှာ
အခုဆွေးနွေးခဲ့တဲ့ ကာကွယ်နည်းတွေဟာ အလွန်ရိုးရှင်းလွယ်ကူပြီး ပရိုဂရမ်မာတိုင်း အလွယ်တကူလုပ်နိုင်တဲ့ အလုပ်တွေပါပဲ။ ဒီလိုရိုးရှင်းလွယ်ကူတဲ့ အချက်အလက်လေးတွေနဲ ပဲ ရန်သူ(ဟက်ကာ) တွ မထိုးဖေါက်နိုင်တဲ့ ခိုင်ခံ့တဲ့ ခံတပ်(ကွန်ပြူတာစနစ်) တစ်ခုတည်ဆောက်နိုင်ပါတယ်။ အသေးအဖွဲ အမှိုက်လေးတွေကို ဂရုစိုက်ပြီးရှင်းလင်းသွားမယ်ဆိုရင် ခမ်းနားတဲ့ ပသာဒ်ကြီးကို မီးဘေးအန္တရယ်က ကာကွယ်နိုင်သလိုပေါ့။ မိတ်ဆွေတို  စိတ်၀င်စားတယ်ဆိုရင် ဒီ hacking နဲ  ပတ်သက်လို  ဆက်လက်ဆွေးနွေးပါဦးမယ်။

ရွှင်လန်းချမ်းမြေ့ပါစေ။
infoTherapy-2012
မှတ်ချက်။ ကွန်ပျူတာဂျာနယ်တွင် ဖါ်ပြပြီးသော ဆာင်းပါးဖြစ်ပါသည်။

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.