වෙබ් අඩවියක් පරිපාලනය කරනවා (website administration) කියන්නෙත් හරියට නැවක කපිතන් තනතුරේ ඉන්නව වගේ වැඩක්. හැම දෙයක් ගැන ම හැම ආකාරයකින් ම විමසිල්ලෙන් ඉන්න ඕනේ. ඇතුළතින් - පිටතින් දෙපැත්තෙන්ම එන සතුරු ප්රහාර වලට මුහුණදෙන්න ඕනේ... අන්තර්ගතය ගැන බලන්න ඕනේ...
සෙවුම් යන්ත්රත් එක්ක තියෙන පළහිළව් විසඳන්නත් ඕනේ....
වෙබ් අඩවියෙ ප්රතිපත්තිත් (policies) එක්ක මේ වැඩ රාජකාරි ප්රමාණය අඩු වැඩි වෙන්නත් පුළුවන්.
හරි.... එමුකො මාතෘකාවට. මගේ පරිපාලනය යටතෙ තියෙන එක වෙබ් අඩවියක් මෑතකදි හදිසියෙම අකර්මණ්ය වුණා. වෙබ් අඩවියට ගියාම සුදු පාට පිටුවක පෙන්නනවා දෝෂ පණිවුඩයක්...
index.php ගොනුවෙ 38 වෙනි පේළිය...
< ලකුණ තමයි අවුලට මුල කියල ඒ පිටුවෙ කියන්නේ. මේ අවුල දැක්ක සැණින් මට දැන්වූ බ්රයන් වෙත මගේ ස්තුතිය!
ඉතින් මමත් මේ ගැන සොයා බලන්න
Filezilla මෘදුකාංගය පාවිච්චි කරලා FTP හරහා වෙබ් අඩවියෙ ගොනු තියෙන ඩිරෙක්ටරියට පිවිසුණා. මේ වෙබ් අඩවිය
CMS එකක් භාවිතයෙන් නිර්මාණය කළ එකක්.
index.php ගොනුව පිරික්සා බැලුවාම අමුතු දේවල් කීපයක්ම දකින්න ලැබුණා.
සාමාන්යයෙන් අපි PHP කේත ලිවීමේදී අපේ PHP කේත කොටස ලියන්නේ
<?php හා
?> යන ටැග අතර. නමුත්, සුපුරුදු සම්මතයට පටහැනි වුණත්, අපේ php ගොනුවෙ තිබුණෙ ආරම්භක (
<?php) ටැගය පමණයි.
PHP කේතයෙ අන්තිමේ HTML Script ටැගයක් තිබුණා. බොහොම භයංකර, බැලු බැල්මට hieroglyphs වගේ පේන අමුතු HTML/ Javascript කේත කෑල්ලක් ඒක.
එතකොට සම්පූර්ණ කේතය මෙන්න මේ වගේ:
<?php
/* වෙබ් අඩවියේ
PHP
කේත */
<script> // ආගන්තුක Javascript කේත කොටස </script>
හේතුනිර්ණය: දෝෂයට හේතු වුණේ PHP අස්සේ HTML තිබීම නිසා HTML කේත කොටසත් PHP කියල හිතාගෙන, අපේ සර්වර් එකේ PHP එන්ජිම මඤ්ඤං වීම.
---
ඉතින් මේක දැක්කාම මම කළ පළවෙනි දෙය මේ ගැන අනිත් පරිපාලකවරුන්ගෙන් (administrators) විමසීම. මේ කේතය ගැන ඒ කිසිවෙක් දැන සිටියෙ නැහැ.
එහෙනම්......
Hacker ප්රහාරයක් ද?
මගේ අනුමානය වුණේ මේ කවුරුහරි hacker කෙනෙකුගෙ වැරදුණු කුරුමානමක් කියලයි. මොකද අපේ වෙබ් අඩවිය අකර්මණ්ය කළා කියල කාටවත් අත්වෙන වාසියක් නැති නිසා.
Phishing වගේ වැඩකට අපේ වෙබ් අඩවිය යොදා ගත්ත නම් ඒකෙන් ඔවුන්ට යම් වාසියක් ලබන්න අවස්ථාව තිබුණා.
කොහොම නමුත් අනිත් ඇඩිමින්ලා මේ ගැන නොදන්න නිසා (අනිත් අයගෙ දැනුවත් වීමකින්/ මැදිහත් වීමකින් තොරව සිද්ධ වුණු නිසා) මම ආගන්තුක HTML/ Javascript කේත කොටස විශ්ලේෂණය කිරීමේ අවශ්යතාව සඳහා මගේ පරිගණකයට පිටපත් කරගෙන,
index.php ගොනුවෙන් ඉවත් කරලා ඒක save කළා. දැන් සයිට් එක බබා වගේ වැඩ.
හැබැයි.......... මගේ වැඩ එතනින් අහවර වෙන්නෙ නැහැ. මීළඟ පියවර සිද්ධියෙ අග මුල කොනක සිට සෙවීම. මෙන්න මෙහෙමයි අපේ වෙබ් අඩවියට ආසාදනය වෙලා තිබුණු විෂබීජය:
ඉතින්,... මේක එකපාර දැක්කාම මහ ලොකු පටළැවිල්ලක් වගේ.... බැලු බැල්මට ඇසෙම්බ්ලි වලින් ලිව්ව එකක් වගේ.... :P මේ කේතය පරීක්ෂා කරමින් ඉන්නකොට පැය විසි හතරක් ඇතුළත දෙවන වතාවටත් වෙබ් අඩවිය අකර්මණ්ය වුණ බව අහම්බෙන් දැනගන්න ලැබුණා.
සිද්ධ වෙලා තිබුණෙ කලින් සිද්ධියමයි. ඉතින් මම පෙර වතාවෙ කළ සැත්කම ම ආපහු කරලා මීට විසඳුමක් හොයන්න උත්සුක වුණා. කාලෙකට පස්සෙ පොඩි අභියෝගයක්! මේක කරදරයක් නෙමෙයි.... අභියෝගයක්....!! සතුටු විය යුතුයි ඒ ගැන.
---
දැනට සිද්ධ වුණු දේවල් ගැන පොඩි සාකච්ඡාවක් මෙතනම ඉදිරිපත් කරන්න හිතුණා. සාකච්ඡාවට සහභාගි වුණේ මගේ මස්තිෂ්ක අර්ධගෝල දෙක.... තනියට පාලුවට අනුමස්තිෂ්කයත් පිටුපස්සෙන් හිටියලු...... :D
මේ මගුල අටවපු කෙනා ඒක කරල තියෙන්නෙ වෙබ් පිටුවක මේ කේතය අඩංගු කරලා වෙබ් පිටුව පූරණය වෙන අවස්ථාවෙ ඒක පරිශීලකගෙ පැත්තෙන් ක්රියාත්මක කරවන්න. නමුත් අපේ php ගොනුවෙ අග වැසීමේ ටැග් එක (
?>) නැති නිසා, සර්වරය පැත්තෙන් ආගන්තුක HTML කේත කොටසක් PHP කේතයක් ලෙසම සලකලා interpret කරන්න උත්සාහ කිරීමෙ අවසාන ප්රතිපලය වුණේ මුළු වෙබ් අඩවියම අකර්මණ්ය වීම.
එක්කෝ අපිත් එක්ක සෙල්ලම් කරන කෙනා/
bot එක ට
index.php ගොනුවෙ සම්පූර්ණයෙන් කියවන්න හැකියාවක් නැහැ. එහෙම නැත්නම් කියවා අවබෝධ කර ගන්න හැකියාවක් නැහැ. කියවා අවබෝධ කරගැනීමේ හැකියාවක් තිබුණා නම් ඒකාන්තයෙන්ම මේ වැඩේ කරන්නෙ මනුස්සයෙක්. නමුත් මේ දෙ වතාවේදී ම php කේතයෙ ව්යූහය නොතකා එහි අගට අන්ධ ලෙස HTML කේත කොටසක් එක් කර තිබීම නිසා මගේ නිගමනය වුණේ මේකට වගකියන්න ඕනෙ bot එකක්ම විය යුතුයි කියන එක.
මම මෙතෙක් ලබලා තියෙන දැනුමේ හැටියටත්, අපේ වෙබ් අඩවියෙ ස්වභාවයත් අනුවත්, වෙබ් ගවේශකයක් හෝ වෙනත් උපක්රමයක් පාවිච්චි කරලා
HTTP හරහා මේ ප්රහාරය ක්රියාත්මක කිරීම අතිශයින්ම අසීරු දෙයක්. (HTTP ගැන හොඳ අවබෝධයක් තියෙනව නම් Firefox පවා hacking tool එකක් කරගන්න බොහොම පහසුයි! -- ඒක වෙනම කතන්දරයක්)
මේ නිසා මගේ සැකය යොමු වුණේ වෙබ් අඩවිය ස්ථාපනය කරලා තියෙන සර්වරය වෙත. සර්වරය වෙත අනවසරයෙන් පිවිසෙන්න සමත් වුණු තක්කඩියෙකුගෙ වැඩක් වෙන්න ඇති! << හැබැයි මේ උපකල්පනයක් පමණයි.
---
අගමුල හෙවිල්ල පොඩ්ඩකට පැත්තක තියලා අර කේත කොටස මම ආපහු පරීක්ෂා කළා. බැලු බැලුමට ආධුනිකයෙකුගේ ධෛර්යය හීන කරවන විධියෙ සංකීර්ණ පෙනුමක් ඒකට තියෙන්නේ. නමුත් ඕනම සංකීර්ණ ගැටළුවක් සරල කොටස් වලට වෙන් කරගත්තාම පහසුවෙන් විසඳන්න පුළුවන්. අන්තිමේ බැලුවම ඒකත් බොහොම සරල දෙයක් නොවැ!
මුලින්ම කියවන්න පහසු ක්රමයකට කේතය පේළි කීපයකට වෙන් කරගත්තා,
මේ තියෙන්නෙ අමාරුකාර පේළිය,
ඒ පේළිය දිහා පරීක්ෂාකාරීව බලන්න... javascript පිළිබඳ එතරම් ම දැනුමක් අවශ්ය වෙන්නෙ නැහැ. :)
Javascript වල තියෙන replace නම් method එක තමයි මෙතන පාවිච්චි කරල තියෙන්නේ. (අහඹු ලෙස) විරාම ලක්ෂණ මුසු කිරීම මගින් සූක්ෂ්ම ආකාරයට සඟවන ලද පාඨ කොටසක්, ක්රමලේඛය ධාවනය වෙන අවස්ථාවේදී ඒ විරාම ලක්ෂණ ඉවත් කර නැවත ප්රයෝජනයට ගැනීමේ අපූරුව! හැබැයි ඉතිං මේක හරියට අගුළු දමාපු අල්මාරියක යතුර ඒකෙ යතුරුකටේම තියෙන්න අරිනව වගේ වැඩක්.
ඔය කේත කොටසෙ අවසාන ප්රතිපලය:
බැලු බැල්මටම පේනව නෙව මේක phishing වගේ වැඩකට පාවිචිචි කරන්න හදපු එකක් කියලා.... :)
මේ සම්පූර්ණ කේතය ධාවනය වෙද්දි වෙබ් ගවේශකය මත දිස් වන වෙබ් පිටුවේ තවත් javascript object එකක් නිර්මාණය වෙනවා. ඒ javascript කේතය තියෙන්නෙ/ තිබිය යුත්තෙ ඔය රතු පාටින් දීල තියෙන URL එකේ. නමුත් වෙබ් ගවේශකයෙන් මේ URL එක වෙත ගියාම දිස් වෙන්නෙ හිස් වෙබ් පිටුවක්. දෙවැනි ප්රහාරයෙදි මම පිටපත් කරගත් කේතයෙන් දැක්වුණේ මේ ව්යූහයම දරණ වෙනත් URL එකක්. පහත දැක්වෙන්නෙ attacks කීපයකින් පසුව මම එකතු කරගත් තවත් මෙවැනි URL දෙකක්.
---
මේ වෙබ් ලිපින මම පරීක්ෂා කර බැලුවා... මේ කේත කොටස
shaakunthala.com හි මගේ වෙබ් අඩවියට දාලා ඇතැම් විට අවශ්ය පරිදි
Wireshark පවා යොදාගෙන පරීක්ෂා කරල බැලුවා. ඒත් කොයි URL එකෙන් වුණත් ලබා දෙන්නෙ අපේක්ෂිත javascript කේතය නෙවෙයි, හිස් පිටුවක්.
ඒ හැම host එකකම port 80 හා 8080 හි වෙබ් සර්වර් ක්රියාත්මකව තිබෙනවා.
මේ port 80 හි ක්රියාත්මක වෙබ් සර්වර මත තියෙන අඩවි:
තිරපිටපත් මත ක්ලික් කරලා පැහැදිලිව බලන්න පුළුවන්
---
වෙබ් අඩවි ලඝු සටහන් (site logs) වලිනුත් කිසිම දෙයක් හොයාගන්න බැරි වුණා. ඒවයෙ මේ ගැන කිසි දෙයක් සටහන් වෙලා තිබුණෙ නැහැ. මේ කිව්වෙ server logs ගැන නෙවෙයි.
මේ ගැන කරන විමර්ශනය මම අතහැර දමා නැහැ. ඊට සමගාමීව මීළඟ පියවර අපට web hosting සේවාව සපයන ආයතනය සමඟ සාකච්ඡා කර විසඳුමක් සොයන එකත් කළ යුතුයි. තාවකාලික පැලැස්තර විසඳුමක් ලෙස
index.php ගොනුවෙ අගට පහත දැක්වෙන කේත කොටස එකතු කළා.
die();
මෙහෙම 'මැරියං!' කිව්වාම එතනින් එහාට කේතය interpret වෙන්නෙ නැහැ. ඒ නිසා අර කෙහෙල්මල් javascript එක interpret වෙන්නෙවත්, වෙබ් ගවේශකය වෙත එන්නෙවත් නැහැ. වෙලාවෙ හැටියට මේ 'මැරියං!' එක පැලැස්තර විසඳුමක් හැටියට බොහොම ප්රයෝජනවත් වුණා.
---
අපේ වෙබ් අඩවිය දැන් කිසිම ගැටළුවකින් තොරව ක්රියාත්මකයි. හැබැයි නැවත නැවතත් ප්රහාරයට ලක් වෙමින් පවතිනවා. die() කියන PHP මෙතඩ් එක පළිහක් වගේ අපේ වෙබ් අඩවිය අකර්මණ්ය වෙන්න නොදී ආරක්ෂා කරනවා. බලමුකො ඒකෙත් අපූරුව!
හැබැයි, විමර්ශණ මෙතනින් නවතින්නෙ නෑ.
index.php ගොනුවෙ permissions තිබුණෙ 664 (-rw-rw-r--) ලෙස. ඒක ටිකක් විතර අසාමාන්යයි වගේ (සාමාන්යයෙන් මේක 644 හෙවත් -rw-r--r--). මේ වෙබ් අඩවිය නිර්මාණය කළ අය වෙබ් අඩවිය සකස් කරන්න සහ host එකට upload කරන්න පාවිච්චි කරල තිබුණෙ වින්ඩෝස් මෙහෙයුම් පද්ධතිය හා ඒ පාදක කරගත් මෘදුකාංග. මේක වින්ඩෝස් වල තියෙන 'අල' permission system එක නිසා මෙතන එය 664 වුණා කියලයි මම හිතන්නේ.
මගේ ඊළඟ ඇටවුම වුණේ මේ permissions 600 (-rw-------) ආකාරයට සැකසීම. සරලව කිව්වොත්, දැන්
index.php කියවන්න සහ සංස්කරණය කරන්න පුළුවන් සර්වරය පැත්තෙන් ඒ ගොනුවෙ අයිතිකරු ලෙස ඉන්න userට පමණයි. අනෙක් අයට කිසිම දෙයක් කරන්න බැහැ. කලින් තිබුණු ක්රමය අනුව අදාළ පරිශීලකටත්, කණ්ඩායමටත් මේ අවසර ලැබී තිබුණා. මේ නව permission සැකසීම මගින් මම සොයාගන්න අදහස් කළේ කලින් කිව්ව bot හෝ ස්වයංක්රීය උපක්රමය ධාවනය වෙන්නෙ අදාළ පරිශිලක යටතේම ද කියන එක.
මේ ආගන්තුක කේත කොටස javascript වීම නිසා ඇති වුණු සැකයක් ඔස්සේ (මේ දැන් මොහොතකට පෙර) කළ සෙවීමකදී
jQuery සහය සඳහා පාවිච්චි කරන
jquery.js ගොනුවත් මෙලෙසම ආසාදනය වී ඇති බව දැනගන්න ලැබුණා. නමුත් එය Javascript ගොනුවක් නිසා කලින් වගේ ප්රතිපල බාහිරයට පෙනුනේ නැහැ. තවදුරටත් සොයා බැලීමේදී මුළු වෙබ් අඩවියෙම විවිධ තැන් වල තියෙන
index.php ගොනු වලටත් javascript ගොනු වලටත් මෙය ආසාදනය වී ඇති බව සොයාගන්න හැකි වුණා. මට හීන්දාඩිය දාන්න ගත්තේ දැන්. තවදුරටත් සොයා බැලීමේදී මේ ගොනු බොහොමයක permissions තිබුණේ 644 (-rw-r--r--) ආකාරයෙන් බවත් නිරීක්ෂණය වුණා. මේ (permissions) නිරීක්ෂණයත් එක්කම මම කලින් ඡේදයෙ විස්තර කළ ඇටවුමේ ප්රතිපල ලැබෙන තෙක් බලා සිටීම අනවශ්ය කාරණයක් බවට පත් වෙනවා.
සියළුම නිරීක්ෂණ සලකා බලා මගේ අවසාන නිගමනය මෙය web hosting සේවාව සපයන ආයතනයේ වරදකින් සිදු වුණා කියන එක. වෙබ් අඩවි ලඝු සටහන් වලත් වැදගත් යමක් සටහන් නොවී තිබීම නිසා, මෙය HTTP හරහා වෙනත් පාර්ශවයක් අනවසර පිවිසීමක් ලබාගෙන සිදු කළ දෙයක් නොවෙයි කියන එක පැහැදිලියි.
---
අද සටහන අනවශ්ය පරිදි දීර්ඝයි කියා මට හිතෙන්නේ.... සුළුවෙන් හරි අපැහැදිලි තැනක් තියෙනවනම් comment එකක් දාන්න.... මම තවත් සරල කරලා විස්තර කරන්නම්.
ඒ වගේම මේ ක්ෂේත්රයේ අත්දැකීම් තියෙන අයගෙ උපදේශත් මේ ලිපියට ප්රතිචාර හෝ ඊමේල් ආකාරයෙන් බලාපොරොත්තු වෙනවා. (cyber forensics කියන්නෙ මේවද මන්දා.... :-/ )
විමර්ශණ කෙසේ වෙතත් නත්තලත් ළඟටම ඇවිත්.... ඉතින්... මගේ බ්ලොග් අඩවියට යන එන හැම දෙනාටම
හැකර් ප්රහාර වලින් තොර සාමකාමී සුභ නත්තලක් වේවා කියල ඔන්න මගෙනුත් නත්තල් සුභපැතුම්! :-)
පසු සටහන (2009/12/25):
මේ සටහනේ
අන්තර්ගතය ලෙස malicious source code කොටස් සඳහන් කිරීම නිසා විවිධ වයිරස් නාශක මගින් මගේ බ්ලොග් අඩවිය අවහිර කර ඇති බව දැනගන්න ලැබුණා. ඒවා කේත ලෙස නොව පාඨ ලෙස render වන නිසා
හානි රහිතයි. මෙය
වයිරස් නාශක මෘදුකාංග වල සිදුවූ වරදක් (False Positive).
මෙය වළක්වන්න අදාළ source code සියල්ල පිළිබිඹු (images) ලෙස යොදන්න සිදු වුණා. නමුත් ඒ ඒ තැන් වලට අදාළ කේත කොටස් අවශ්ය නම් පහත දැක්වෙන සබැඳියෙන් බාගත කරගත හැකියි.
http://www.4shared.com/file/180832826/c4c709df/altcodetxt.html
Password: malcode
(ඔබ වින්ඩෝස් මෙහෙයුම් පද්ධතිය පාවිච්චි කරනවා නම් මේ ගොනුව විවෘත කරන්න wordpad මෘදුකාංගය යොදාගන්න -- notepad පාවිච්චි කරන්න එපා)
යොමු:
http://forum.avast.com/index.php?topic=52588
http://groups.google.com/group/techkatha/browse_thread/thread/ab92437e0054fcec
මේ වින්නැහිය ගැන මට දැන්වූ සියළුම දෙනාට මගේ හෘදයාංගම ස්තුතිය පිරිනමනවා! :)
Merry X'mas to you all again!!