මොනවද මේ SQL Injection Vulnerability Types
අපි මේ කතා කරන්න යන්නේ SQL වලට සම්බන්ධ ඉතා වැදගත් කොටසක් ගැනයි. SQL එක්ක වැඩ කරන අය ගොඩක් වෙලාවට මේ ගැන දන්නවත් ඇති. ඒ වගේම එයාලා මේ ගැන තව දුරටත් ඉගෙන ගන්න කැමතිත් ඇති. දන්න, නොදන්න හැමෝටම දැනගන්න එහෙනම් අපි අද SQL Injection Vulnerability Types ගැන කතා කරමු.
ඉස්සෙල්ලා බලමුකෝ මොකක්ද මේ SQL Injection Vulnerability Types කියන්නේ කියලා. Structured Query Language කියන දීර්ඝ නාමය තමයි කෙටි කරලා SQL ලෙස හඳුන්වන්නේ. මේ SQL වැඩසටහන්කරණ භාෂාවක් ලෙස තමයි පිළිගන්නේ. ඒ කියන්නේ, පරිඝනක දත්ත පද්ධති වල දත්ත ගබඩා කිරීමට අවශ්ය වන දත්ත සමුදායන්, Database කියලා අපි කියන්නේ. අන්න මේ Database සකසන්න සහ කළමනාකරණය කරගන්න අවශ්ය වන වැඩසටහන්කරණ භාෂාව විදියට SQL යොදාගන්නවා. හරි, දැන් එහෙනම් බලමු අපි අද කතා කරන දේ මොකක්ද කියලා.
SQL දත්ත සමුදායන් ක්රියාත්මක වන MySQL, Oracle, SQL Server වැනි වෙබ් සර්වර් වල තමයි අන්තර්ජාලයේ තිබෙන වෙබ් අඩවි වල දත්ත එක්රැස් කරලා තබාගන්නේ. සරලවම කිව්වොත් අන්තර්ජාලය තුළින් අපි පාවිච්චි කරන වෙබ් අඩවි වල ඇති සියලුම දත්ත, මේ SQL වලින් සහාය දක්වන databases තුළ තාබාගෙන ඉන්නවා. ඉතින් මේ databases
වැඩසටහන්කරණය කරපු SQL කේතයන් හරහා ද්වේශසහගතව කාට හරි ඇතුල්වෙන්න යොදාගන්නා ක්රමයක් තමයි මේ SQL Injection (SQLi) කියලා කියන්නේ.
වෙබ් අඩවියක database එකක් hack කරන්න අවශ්ය කෙනෙකුට මේ SQL Injection ක්රම යොදාගෙන වෙබ් අඩවියට හොරෙන් ඇතුල් වෙලා එකේ තියෙන සංවේදී දත්ත, එහෙමත් නැතිනම් sensitive data වලට හොරෙන් ඇතුල් වෙන්න පුළුවන්. ඒ හරහා ඔවුන්ට පුළුවන් වෙබ් අඩවි පරිශීලකයින්ගේ නාමයන්, මුරපද, ක්රෙඩිට් කාඩ් අංක, බුද්ධිමය දේපල වගේ ඉතා රහස්ය තොරතුරු ලබාගන්න. ඒ වගේම hackerවරුන්ට database එකේ තිබෙන දත්ත වෙනස් කරන්න, අලුත් දත්ත ඇතුළත් කරන්න වගේම දත්ත සම්පූර්ණයෙන් මකලා දාන්නත් මේ SQL Injection යොදාගන්න පුළුවන්. ඉතින් මේ නිසා මේ ක්රමය අන්තර්ජාලය තුළ තිබෙන පැරණිතම, ජනප්රියම සහ ඉතා භයානක ක්රමය විදියටත් හඳුන්වනවා.
කොහොමද මේ SQL Injection ක්රියාත්මක වෙන්නේ?
SQL Injection එකක් සිදුකරන්න නම් attacker මුලින්ම වෙබ් අඩවියකින් අනතුරකට භාජනය කරගන්න පුළුවන් user inputs, ඒ කියන්නේ පරිශීලක නාම සහ මුරපද වගේ ආදානයන් සොයාගන්න ඕන. එහෙම අනතුරකට භාජනය වෙන්න පුළුවන් SQL Injection සහිත වෙබ් අඩවියකින් user කෙනෙක් SQL query එකක් ඇතුළත් කරාම attacker ට පුළුවන් හානිදායක දත්ත ආදානයක් කරන්න. අපි ඒකට කියනවා malicious payload එකක් කියලා. මෙය attack එකේ එක් මූලික කොටසක්. Attacker විසින් යවන මෙම හානිදායක කොටස නිසා database එක තුළ හානිකර SQL විධානයන් ක්රියාත්මක වෙන්න පටන් ගන්නවා.
SQL කියන්නේ databases වල ගබඩා වෙලා තියෙන දත්ත පාලනය කරන query language එකක් කියලා අපි කලිනුත් සඳහන් කරා. එමඟින් ඔබට database එකට ඇතුල් වෙන්න (access), දත්ත එකතු කරන්න (add), වෙනස් කරන්න (modify) සහ මකා දමන්න (delete) පුළුවන්. ඒ විතරක්ම නෙවේ. මෙම SQL විධානයන් මෙහෙයුම් පද්ධතිවල විධානයන් සමඟත් ක්රියාත්මක වෙන නිසා SQL Injection එකක් සිදුවීම සම්පූර්ණ පරිඝනක ජාලයටම හානියක් වෙනවා.
SQL Injection ආකාර | Types of SQL Injection (SQLi)
SQL Injection ප්රධාන ආකාර තුනක් යටතේ කතා කරන්න පුළුවන්. ඒවා තමයි,
- In-band SQLi (Classic SQLi)
- Inferential SQLi (Blind SQLi)
- Out-of-band SQLi
1. In-band SQLi (Classic SQLi)
බහුලවම භාවිතා වන සහ පහසුවෙන්ම කරන්න පුළුවන් SQL Injection එක තමයි මේ ආකාරය. මෙම ක්රමයේදී attackerට එකම සන්නිවේදන නාලය තුළින් attack එක කරන්නත්, ප්රතිඵල ලබාගන්නත් හැකියාව තිබෙනවා. මෙම ක්රමයේදී SQL Injection භාවිතා කරන මූලික ආකාර දෙකක් තිබෙනවා. ඒවා Error-based SQLi සහ Union-based SQLi ලෙස හඳුන්වනවා.
Error-based SQLi – වෙබ් අඩවියක database එකෙන් ලැබෙන error message වලට අනුව database එකේ ව්යුහය හඳුනාගෙන ඒ අනුව ක්රියාත්මක වීමයි මෙහිදී සිදුවන්නේ. ඉතින් මේ ආකාරයට සමහරවිට attackerට මුළු දත්ත පද්ධතියේම සැකැස්ම ලබාගන්න පුළුවන්. මේ නිසා වෙබ් අඩවියක් සංවර්ධනය කරනවිට මෙවැනි errors ඇතිවීම වළක්වන්න කටයුතු කරන්න ඕන.
Union-based SQLi – SQL databases වල තිබෙන UNION කියන keyword එකට අනුව SELECT statements දෙකක් හෝ කිහිපයක් එකට එකතුකර ප්රතිඵල ලබාගැනීමේ ක්රමවේදයයි.
2. Inferential SQLi (Blind SQLi)
මේක නම් attackerට තරමක් කාලය වැය වෙන ක්රමවේදයක්. මෙහිදී attackerට වෙබ් අඩවිය හරහා හුවමාරු වන දත්ත හෝ ප්රතිඵල දැකගැනීමේ හැකියාවක් නැහැ. ඒ නිසා attacker කරන්නේ වෙබ් අඩවියේ ස්වරූපය සහ හෝඩුවාවන් අනුව වක්රාකාර ක්රම මඟින් SQL Injection කිරීමයි. HTTP ප්රතිචාර, පරිශීලකයින්ගේ දත්ත ආදානයන් අනුව ලැබෙන හිස් වෙබ් පිටු, පරිශීලකයෙකුගේ දත්ත ඇතුළත් කිරීම් වලට අනුව වෙබ් අඩවියෙන් ප්රතිචාර ලැබෙන වෙලාව ආදී හෝඩුවාවන් තමයි මෙහිදී ප්රයෝජනවත් වෙන්නේ.
මෙම ක්රමයේදීත් භාවිතා කරන මූලික SQL Injection ආකාර දෙකක් තියෙනවා. ඒවා Boolean-based (content-based) Blind SQLi සහ Time-based Blind SQLi ලෙසයි හඳුන්වන්නේ.
Boolean-based (content-based) Blind SQLi – මෙහිදී SQL Injection මඟින් වෙබ් අඩවියට TRUE or FALSE query වලට අනුව විවිධ ප්රතිඵල ලැබෙන්න සකස් කරනවා. HTTP සහිත අන්තර්ගතය ලැබෙන ප්රතිඵලය වෙනස් වී හෝ ඒ ආකාරයෙන්ම ලැබෙනවා.Attackerට අකුරෙන් අකුර, ඒ කියන්නේ database එකේ character එකින් එක පරීක්ෂා කරමින් මේ SQL Injection එක කරන්න වෙන නිසා මෙය තරමක් කාලය ගත වන ක්රමවේදයක්.
Time-based Blind SQLi – මෙම ක්රමයේදී ප්රතිචාර ලබාගැනීමට database එකෙන් කිසියම් කාලයක් වෙනකන් බලං ඉන්න වෙනවා. Attackerට, TRUE or FALSE query වලින් ලැබෙන ප්රතිඵලයට අනුව ප්රතිචාරය ලැබෙන්න යන්න කාලය පෙන්නුම් කරනවා. ප්රතිපලය අනුව HTTP ප්රතිචාරය එසැණින් හෝ ප්රමාද වී ලැබෙන්න පුළුවන්. මෙම ක්රමවේදයත් තරමක් කාලය ගතවෙන එකක් විදියටයි හඳුන්වන්නේ.
3.Out-of-band SQLi
මෙය ඒ තරම් සුලබ ආකාරයක් නොවේ. ඒ මොකද කියනවා නම් වෙබ් අඩවිය භාවිතා කරන database එකේ තිබෙන features වල අනුකූලවයි මෙම SQL Injection ක්රමවේදය රඳා පවතින්නේ. ඒ වගේම මේ ක්රමවේදය ගොඩක් වෙලාවට යොදාගන්නේ attackerට එකම channel එකෙන් attack කරන්න සහ ප්රතිඵල ලබාගන්න නොහැකි විටයි. මෙහිදී database එකන් DNS හෝ HTTP ප්රතිචාර වලට අනුව attackerට ප්රතිඵල ලබාදීම සිදුවෙනවා.