Çfarë është një Symlink?
Symlink (Symbolic Link ose Soft Link) është një tip i veçantë skedari që përmban lidhje me një skedar tjetër në sistemet UNIX dhe çdo derivat të tij. Praktikisht mund ta konsideroni si shortcuts në sistemet Windows.
Nëse do doja të krijoja një Symlink të skedarit “/home/feniksi/skedari.php” në skedarin “/home/luani/feniksi.php”, do shkruaja një komandë si më poshtë:
| INI | | Kopjo Kodin | | ? |
| 1 | ln -s /home/feniksi/skedari.php /home/luani/feniksi.php |
Komanda “ln”, nëse thërritet pa parametrin “-s”, krijon Hard Links, të cilat janë të ndryshëm në koncept nga Symlinks. Duke shtuar parametrin “-s”, linku i krijuar është Symlink. Në rastin më sipër, kam krijuar një Symlink për “skedari.php” të quajtur “feniksi.php”.
Një Symlink referencon direkt skedarin origjinal, qoftë në egzekutim apo lexim. Kjo e fundit, pra leximi i skedarëve origjinalë duke krijuar Symlinks, është edhe tema e kësaj guide.
Siguria lidhur me Symlinks
Problemi nga të cilët vuajnë serverat shared është se i lejojnë sulmuesëve të krijonë Symlinks që referencojnë skedarë që nuk u përkasin. Nëse këto skedarë janë opsione konfigurimi të viktimave, që përmbajnë të dhënat e databazës apo fjalëkalimin e administratorit, teknika bëhet vërtetë e rrezikshme. Serveri Web më popullor në planet, Apache, e ka të aktivizuar automatikisht opsionin “FollowSymlinks”, gjë që e bën vulnerabël.
Le të shohim një skenar se si sulmuesi mund të përdorë Symlinks për të marrë të dhëna sensitive nga viktima.
- Sulmuesi ngarkon “php shell” tek llogaria e tij në server ose mund të ketë akses direkt në shell, për të egzekutuar komanda.
- Krijon një Symlink të skedarit të konfigurimit të viktimës.
- E lexon atë skedar dhe merr të dhënat e konfigurimit.
Duke mbetur në skenarin më sipër, sulmuesi mund të egzekutonte një komandë të tillë:
| INI | | Kopjo Kodin | | ? |
| 1 | ln -s /home/viktima/public_html/konfigurimi.php /home/sulmuasi/public_html/newfolder/konfigurimi.php |
Skedari “konfigurimi.php” i viktimës mund të ketë të dhënat e databazës së viktimës, gjë që ja bën shumë të lehtë punën sulmuesit. I mjafton të ngarkojë një aplikacion PHP që menaxhon databazat MySQL dhe të vendosë të dhënat e marra nga viktima. Automatikisht ka akses të bëjë gjithçka me atë databazë, qoftë ta manipulojë apo ta fshijë.
Edhe nëse FollowSymlinks nuk është e aktivizuar në Apache, sulmuesi mund ta aktivizojë me .htaccess duke vendosur +FollowSymlinks. Gjithashtu mund të bëjë që skedarët PHP të lexohen si tekst, duke shtuar AddHandler dhe AddType respektive, përsëri në .htaccess.
| INI | | Kopjo Kodin | | ? |
| 1 | +FollowSymlinks |
| 2 | |
| 3 | AddHandler txt .php |
| 4 | AddType txt .php |
Si të mbroheni nga Symlinks
Metoda që do ju tregoj funksionon për pjesën më të madhe të rasteve dhe do ju sigurojë që Symlinks mos të abuzohen nga njerëz me qëllime përfitimi. Duke qenë se ka pasur shumë sulme të tilla, sidomos kohët e fundit me përhapjen e teknikës, ju këshilloj të merrni masa të menjëhershme. Më poshtë do ju tregoj 2 teknika, ose më mirë 2 raste në bazë të nivelit të aksesit që keni në server: Administrator ose Klient i një serveri shared.
Administratorët
Nëse jeni administrator i serverit, mund të shmangni problemet duke konfiguruar Apache-n që të mos lejojë mbivendosjen e opsionit FollowSymlinks. Konfigurimi është fare i thjeshtë dhe mund ta bëjë kushdo.
Fillimisht gjeni vendodhjen e skedarit të konfigurimit të Apache: httpd.conf. Kjo varet nga mënyra e instalimit. Psh, mund të jetë tek: /usr/local/apache/conf/httpd.conf.
Hapeni skedarin “httpd.conf” me një editor dhe gjeni rreshtin:
| INI | | Kopjo Kodin | | ? |
| 1 | <Directory "/"> |
| 2 | Options ExecCGI -FollowSymLinks Includes IncludesNOEXEC Indexes MultiViews SymLinksIfOwnerMatch |
| 3 | AllowOverride All |
| 4 | </Directory> |
Direktiva “AllowOverride All” do të thotë se Apache i lejon të mbivendosen lokalisht opsionet përmes .htaccess. Kjo s’na intereson, sepse i lejon sulmuesëve të mbivendosin opsionin FollowSymlinks dhe të përfitojnë nga Symlinks. Do përcaktoj një listë të vetëm atyre opsioneve që na interesojnë të mbivendosen, duke i bllokuar të tjerat.
Tek “AllowOverride All” ndryshojeni në “AllowOverride AuthConfig FileInfo Indexes Limit Options=Includes,Indexes,MultiViews”. Duhet të duket si më poshtë:
| INI | | Kopjo Kodin | | ? |
| 1 | <Directory "/"> |
| 2 | Options ExecCGI -FollowSymLinks Includes IncludesNOEXEC Indexes MultiViews SymLinksIfOwnerMatch |
| 3 | AllowOverride AuthConfig FileInfo Indexes Limit Options=Includes,Indexes,MultiViews |
| 4 | </Directory> |
Pasi ta keni bërë ndryshimin dhe ta keni ruajtur skedarin, bëni restart Apache-n. Zakonisht mjafton të shkruani komandën më poshtë, por kjo varet nga distro e Linux dhe mënyra e instalimit.
| INI | | Kopjo Kodin | | ? |
| 1 | service httpd restart |
Në këtë moment e keni siguruar serverin tuaj nga problemet e sigurisë që Symlinks krijojnë. Nëse një sulmues do tentojë të aktivizojë opsionin FollowSymlinks, në atë direktori do të shfaqet “Internal Server Error”. Një ndryshim shumë i vogël, por me rëndësi të madhe për të ruajtur integritetin të dhënave në serverin tuaj.
Nëse përdorni opsionet automatike të WHM, në shumë raste ai e rindërton konfigurimin e Apache. Sigurohuni të kontrolloni nëse AllowOverride është kthyer në “All”, apo ka mbetur si ç’e shkruajta më lart.
Klientët
Klientët normalisht nuk kanë akses në opsionet e konfigurimit të Apache, kështu që alternativat janë më të pakta. Por, për fat të mirë, pjesa më e madhe e serverave shared lejojnë krijimin e skedarëve .htaccess për të mbivendosur konfigurimet bazë të Apache.
Fillimisht krijoni një skedar me emër “.htaccess” (pika është e rëndësishme) në direktorinë ku ndodhet skedari i konfigurimit. Më pas, hapeni me një editor dhe vendosni kodin më poshtë:
| INI | | Kopjo Kodin | | ? |
| 1 | <Files "konfigurimi.php"> |
| 2 | Order Deny,Allow |
| 3 | Deny from All |
| 4 | </Files> |
Kjo i bllokon të gjitha tentativat për të aksesuar skedarin, qoftë nga interneti apo përmes Symlinks. Emri “konfigurimi.php” është thjeshtë si shembull dhe normalisht do duhet ta ndërroni me emrin e skedarit tuaj të konfigurimit. Gjithashtu, do ju duhet të bëni të njëjtin veprim për çdo skedar që përmban të dhëna kritike.
Siguroni skriptet PHP nga funksionet e rrezikshme
Me zgjidhjen e problemeve nga Symlinks, ju mbetet edhe një gjë tjetër po aq e thjeshtë që i përket vetëm administratorëve të serverave. Bëhet fjalë për bllokimin e disa funksioneve të rrezikshme të PHP që mund të përdoren nga sulmuesit për të kryer dëme.
Gjeni skedarin e konfigurimit të PHP-së, php.ini, dhe hapeni me një editor. Bëni ndryshimet në direktivat e shënuara më poshtë:
| INI | | Kopjo Kodin | | ? |
| 1 | cgi.force_redirect = 0; |
| 2 | cgi.fix_pathinfo = 0; |
| 3 | cgi.discard_path = 1; |
| 4 | disable_functions = disk_total_space, diskfreespace, apache_note, apache_setenv, closelog, debugger_off, debugger_on, define_syslog_variables, escapeshellarg, escapeshellcmd, ini_restore, openlog, passthru, pclose, pcntl_exec, popen, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, syslog, system, url_exec, base64_encodem, readlink, eval, glob, root, symlink; |
Gjithashtu, për të mos lejuar që klientët të përdorin php.ini individuale dhe për të mos lejuar që klientët ti ndryshojnë ose ti fshijnë funksionet e rrezikshme në “disable_functions”, mjafton të ndryshoni konfigurimin e suPHP, i cili ndodhet në: /opt/suphp/etc/suphp.conf.
Hapeni atë skedar dhe gjeni rreshtat më poshtë:
| INI | | Kopjo Kodin | | ? |
| 1 | [phprc_paths] |
| 2 | ;Uncommenting these will force all requests to that handler to use the php.ini |
| 3 | ;in the specified directory regardless of suPHP_ConfigPath settings. |
| 4 | ;application/x-httpd-php=/usr/local/lib/ |
| 5 | ;application/x-httpd-php4=/usr/local/php4/lib/ |
| 6 | ;application/x-httpd-php5=/usr/local/lib/ |
Ndryshojini në:
| INI | | Kopjo Kodin | | ? |
| 1 | [phprc_paths] |
| 2 | ;Uncommenting these will force all requests to that handler to use the php.ini |
| 3 | ;in the specified directory regardless of suPHP_ConfigPath settings. |
| 4 | application/x-httpd-php=/usr/local/lib/ |
| 5 | application/x-httpd-php4=/usr/local/php4/lib/ |
| 6 | application/x-httpd-php5=/usr/local/lib/ |
Në fakt thjeshtë kam hequr komentet, dmth pikë-presjet “;” nga çdo direktivë. Do ju duhet të bëni restart edhe një herë Apache-t dhe në fund të çaktivizoni Safe Mode në php.ini.
| INI | | Kopjo Kodin | | ? |
| 1 | safe_mode = Off |
Si ekstra, do ju sugjeroja të çaktivizoni disa komanda për klientë dhe ti lini vetëm për administratorin. Këtë mund ta bëni përmes SSH (Secure Shell), duke shkruar rreshtat më poshtë:
| INI | | Kopjo Kodin | | ? |
| 01 | chmod 0700 /bin/ln |
| 02 | chmod 0700 /bin/su |
| 03 | chmod 0700 /bin/cat |
| 04 | chmod 0700 /bin/pwd |
| 05 | chmod 0700 /bin/kill |
| 06 | chmod 0700 /bin/doexec |
| 07 | chmod 0700 /bin/link |
| 08 | chmod 0700 /bin/chmod |
| 09 | chmod 0700 /bin/netstat |
| 10 | chmod 0500 /bin/ps |
| 11 | chmod 0700 /bin/df |
| 12 | chmod 0700 /usr/bin/lynx |
| 13 | chmod 0700 /usr/bin/gcc |
| 14 | chmod 0700 /usr/bin/nc |
| 15 | chmod 0700 /usr/bin/wget |
| 16 | chmod 0700 /usr/bin/scp |
| 17 | chmod 0700 /usr/bin/cvs |
| 18 | chmod 0700 /usr/bin/telnet |
| 19 | chmod 0700 /usr/bin/symlinks |
| 20 | chmod 0500 /usr/bin/w |
| 21 | chmod 0500 /usr/bin/who |
| 22 | chmod 0500 /usr/bin/free |
| 23 | chmod 0500 /usr/bin/vmstat |
| 24 | chmod 0700 /usr/bin/ld |
| 25 | chmod 0700 /usr/bin/tail |
| 26 | chmod 0700 /usr/bin/tailf |
| 27 | chmod 0700 /usr/bin/du |
| 28 | chmod 0700 /usr/bin/find |
| 29 | chmod 0700 /usr/bin/whoami |
| 30 | chmod 0700 /usr/bin/ld86 |
| 31 | chmod 0700 /usr/bin/ldd |
| 32 | |
| 33 | |
| 34 | chmod 0700 /usr/lib/gcc |
| 35 | chmod 0700 /usr/lib/gcc-lib |
| 36 | |
| 37 | chmod 700 /usr/bin/perlcc |
| 38 | chmod 700 /usr/bin/byacc |
| 39 | chmod 700 /usr/bin/yacc |
| 40 | chmod 700 /usr/bin/bcc |
| 41 | chmod 700 /usr/bin/kgcc |
| 42 | chmod 700 /usr/bin/cc |
| 43 | chmod 700 /usr/bin/gcc |
| 44 | chmod 700 /usr/bin/i386*cc |
| 45 | chmod 700 /usr/bin/*c++ |
| 46 | chmod 700 /usr/bin/*g++ |
| 47 | chmod 700 /usr/lib/bcc /usr/lib/bcc/bcc-cc1 |
| 48 | chmod 700 /usr/i386-glibc21-linux/lib/gcc-lib/i386-redhat-linux/2.96/cc1 |
Përfundimi
Me vetëm disa ndryshime të thjeshta konfigurimi, siguruam që serverat shared të mos vuajnë nga problemet që sjellin Symlinks. Qofshit Administratorë apo thjeshtë Klientë të një serveri, hapat e mësipërm mund të ndiqen nga kushdo, me çdo nivel eksperience në Linux dhe menaxhim serverash web. Më e rëndësishmja është që bllokoni një sulm shumë të përhapur që mund ti rrezikojë shumë të dhënat tuaja personale.





Prap se prap sdo te thot qe nuk ekzistojn menyra per ti rikthyer ca nga keto funksione, e ndoshta edhe gjitha prap
Nese keni lexuar tekstin me larte e kupton qe kjo nuk behet “bypass” sepse ndryshimi eshte ne konfigurim te apache, dhe deaktivon override per SymLink. Vetem nese je root.
& nice one by the way
This is a much better solution, that doesn’t require turning off half the server’s functionality:
http://forums.cpanel.net/f185/how-prevent-creating-symbolic-links-non-root-users-202242-p2.html#post996441
This patches Apache to force it to always not follow sym links if the owner doesn’t match the destination, which neatly fixes this. With the patch, the symlink issue is solved 100%, with the above, it’s not necessarily completely solved.
Shume bukur Luan megjithse nuk kam shume njohuri per serverat por artikulli me ndihmoje te kupja shume gjera
Nese fjala osht vetem per file-in config.php ku ruhet t’dhanat e DBs ateher krejt kjo mundet mu mbrojt nese file-it i ndrohet owneri i bohet apache si dhe te drejtat e file-it i behen 0600, keshtu qe edhe nese bohet sym link apet ska drejta me lexu permbajten e file-it. Nashta s’osht praktik e mir po eshte me e shpejt.