Drupal biztonság. Tuesday, April 3, 12



Hasonló dokumentumok
Egészítsük ki a Drupal-t. Drupal modul fejlesztés

Webapp (in)security. Gyakori hibákról és azok kivédéséről fejlesztőknek és üzemeltetőknek egyaránt. Veres-Szentkirályi András

MicroSigner Közvetítő Szerver fejlesztői dokumentáció

Biztonságos PHP a gyakorlatban

Weboldalak Biztonsági Kérdései

MicroSigner Közvetítő Szerver fejlesztői dokumentáció

Adatbázisok elleni fenyegetések rendszerezése. Fleiner Rita BMF/NIK Robothadviselés 2009

ÁLTALÁNOSAN LEÍRVA: KONKRÉTAN AZ INSOMNIA ESETÉBEN:

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

8. óra Weboldalak biztonsága. Gyimesi Ákos

Silent Signal Kft. Webáruházak informatikai biztonsága Veres-Szentkirályi András Marketingtorta - 4 1

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

MicroSigner Közvetítő Szerver fejlesztői dokumentáció

WEBFEJLESZTÉS 2. MUNKAMENET-KEZELÉS, HITELESÍTÉS

Hálózati architektúrák és Protokollok GI Kocsis Gergely

DRUPAL 7. újdonságai. Hojtsy Gábor Drupal Hétvége, Budapest november 14. Angela Byron fóliái alapján

Webes alkalmazások fejlesztése 1. előadás. Webes alkalmazások és biztonságuk

Symfony kurzus 2014/2015 I. félév. Security: authentication, authorization, user provider, role-ok, access control, FOS user bundle

Megtanuljuk, hogyan lehet egy web-alkalmazással adatbázishoz csatlakozni Pontosan megnézzük a PHP lehetőségeit o MySQL-hez o Oracle-höz

1. Bevezető. 2. Sérülékenységek

JavaScript bűvésztrükkök, avagy PDF olvasó és böngésző hackelés

API tervezése mobil környezetbe. gyakorlat

WWW Kliens-szerver Alapfogalmak Technológiák Terv. Web programozás 1 / 31

Széchenyi István Egyetem

MailMasterPlus API. fejlesztői dokumentáció

CTools és Panels pluginok

Az Educatio weboldalain elhelyezhető hirdetések technikai paraméterei

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

Sakk játék. Feladat: JavaScript segítségével olyan programot kell írni, ami egy sakktáblát szimulál. Kiválasztásra változtatják a helyüket.

Webes alkalmazások fejlesztése 1. előadás. Webes alkalmazások és biztonságuk. Cserép Máté

1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7

Moodle-integrálás intézményi környezetben

Valimed API. REST API a magyarországi orvos pecsétszámok validálására

A webprogramozás alapjai. Óbudai Egyetem Neumann János Informatikai Kar 2018/19/1 szemeszter

Számítógépes Hálózatok GY 8.hét

Gyimesi István fejlesztési vezető Cardinal Számítástechnikai Kft.

Két tűz között. statikus site generátorok és javascript alkalmazások és a Drupal

Internet technológiák

Webtárhely létrehozása a helyen. Lépések Teendő 1. Böngészőbe beírni: 2. Jobb oldalon regisztrálni (tárhelyigénylés).

Hálózati architektúrák és Protokollok GI Kocsis Gergely

Csatlakozás a BME eduroam hálózatához Setting up the BUTE eduroam network

SQLi és XSS sérülékenységek

Hálózati architektúrák és Protokollok GI Kocsis Gergely

WEB PROGRAMOZÁS 3.ELŐADÁS. Űrlapok

Moodle -egy ingyenes, sokoldalú LMS rendszer használata a felsőoktatásban

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

LOGalyze Telepítési és Frissítési Dokumentáció Verzió 3.0

Multimédia 2017/2018 II.

Silent Signal Kft. Webáruházak biztonsági vizsgálatainak lehetőségei és tapasztalatai Szabó Péter Veres-Szentkirályi András

Webszolgáltatások (WS)

HTML. Dr. Nyéki Lajos 2016

Web-technológia PHP-vel

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

PHP. Adatbázisok gyakorlat

Sakk-játék. Bármilyen számítógépen működik, amin található böngésző és Java alkalmazás. Indító képernyő

A HTML5 hirdetések előkészítéséhez szükséges műszaki előírások

PHP gyorstalpaló, avagy a Hello World-től az űrlapellenőrzésig

NGFW + IPS + anti-apt + BYOD = Sophos UTM 9.2

Elektronikus levelek. Az informatikai biztonság alapjai II.

Természetesen készíts egy csempe nevű könyvtárat és ide mentsd az index.html állományt.

Memória játék. Felhasználói dokumentáció

Facebook album beillesztése az oldalba

Szalai Ferenc

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

MVC. Model View Controller

A PHP nyelv alapjai. Web-Sky Consulting Kft Tóth Imre 2009

11. Gyakorlat: Certificate Authority (CA), FTP site-ok

Webes alkalmazások fejlesztése

Webes űrlapok és az XForms ajánlás

Operációs rendszerek 1.

Smarty AJAX. Miért jó ez? Ha utálsz gépelni, akkor tudod. Milyen műveletet tudunk elvégezni velük:

5-ös lottó játék. Felhasználói dokumentáció

HTML. Ismerkedés a JavaScripttel. A JavaScript lehet ségei. A JavaScript kód helye. Önálló JavaScript fájlok

Az image objektum. Az image eseménykezel i. Képek el zetes betöltése. Feladat. Váltóképek készítése

Hány komputer van a kezemben?

Moodle IPSZILON előadás március 23.

HTML és CSS. Horváth Árpád május 6. Óbudai Egyetem Alba Regia M szaki Kar (AMK) Székesfehérvár

Objektumorientált programozás

S z á m í t ó g é p e s a l a p i s m e r e t e k


Számítógépes hálózatok

WEBES ALKALMAZÁSFEJLESZTÉS 1.

Enabling Grids for E-sciencE. EGEE köztesréteg. Adat szolgáltatások a glite-ban. INFSO-RI

WEBFEJLESZTÉS 2. ADATTÁROLÁS, FÁJLOK

4. Gyakorlat: Csoportházirend beállítások

HTML é s wéblapféjlészté s

Biztonság java web alkalmazásokban

Miért érdemes váltani, mikor ezeket más szoftverek is tudják?

Internet, Az internet főbb szolgáltatásai web keresőszolgáltatásokkal Keresőrendszerek: Kulcsszavas 2) Egyéb keresők: Metakeresők gyűjtőkörű keresők

Symfony kurzus 2014/2015 I. félév. Controller, Routing

Webkezdő. A modul célja

Az alábbi kód egy JSON objektumot definiál, amiből az adtokat JavaScript segítségével a weboldal tartalmába ágyazzuk.

Alapfogalmak, WWW, HTTP

Extrémen brutál, gyors talpaló PHP nyelvhez (database). v2.1

Felhasználói útmutató a portal.nakvi.hu oldalhoz

S, mint secure. Nagy Attila Gábor Wildom Kft.

Weboldalak biztonsága

BackupPC. Az /etc/hosts fájlba betehetjük a hosztokat, ha nem a tejles (fqdn, DNS név) névvel hivatkozunk rájuk: # /etc/hosts #

Teszt topológia E1/1 E1/0 SW1 E1/0 E1/0 SW3 SW2. Kuris Ferenc - [HUN] Cisco Blog -

PostGIS mogyoróhéjban

Átírás:

Drupal biztonság

Ki célpont?

mi nem vagyunk célpontok Az adatok értékesek (pl. tematizált email címlista az {user} táblából) A látogatók értékesek Minden gép számít (botnetek) Vandálkodni jó :)

Ki célpont? Mindenki

Biztonságról általában Csak biztonságos és nem biztonságos oldal van, nincs félig biztonságos Egy rossz sor kód is elég ahhoz, hogy bárki bármit tehessen az oldalunkkal / szerverünkkel A webfejlesztő is programozó, ugyanúgy kell nekünk is törődnünk a biztonsággal, mint annak, aki az amerikai védelmi hivatalnak fejleszt.

Hálózati biztonság Titkosított protokollok használata (FTP és HTTP (feltöltés) kerülendő) Wi-Fi esetén WPA titkosítás Total Commander nem jelszómegőrző

Így hallgathatlak le téged

Bárki lehallgathat Nem csak a képzett crackerek sudo ifconfig wlan0 down sudo iwconfig wlan0 mode monitor sudo ifconfig wlan0 up sudo wireshark

Megoldások SSL-lel titkosított protokollok használata: FTPS SFTP HTTPS SSH VPN

Szerverbeállítások FastCGI (DDoS ellen jobb) PHP suhosin használata php.ini open_basedir disabled_functions disabled_classes safe_mode kikapcsolása (hamis biztonságérzet, gyakorlatban nem sokat véd)

Formok biztonsága a hidden (és bármilyen más) mezők tartalmai ugyanúgy módosíthatóak a felhasználók által! (meglepően sok oldal törhető így) szerencsére ezt a form api kivédi

Formok biztonsága Bizonyos érzékeny adatok (pl.: bankkártya szám) beviteli mezőjénél az autocomplete= off attribútum használata

HTTP kérések Írás soha ne legyen GET Létrehozás, szerkesztés az POST (form miatt), de a törlés is legyen az! Nem árt, ha rákérdezünk a felhasználóra törlés előtt (Drupalban: confirm_form() függvény) Ha bejut valamilyen bot, akkor a linkeken végigmegy ha ez egy admin felület, akkor törölheti az összes tartalmat

HTTP kérések Érzékeny adatot URL-ben soha http://example.com/register.php? username=foo&password=bar&mail=foobar@example.com

JavaScript A JavaScript által végzett ellenőrzés csak kényelmi szolgáltatás, minden ellenőrzést el kell végezni a szerver oldalon is!

JavaScript Valós életből vett ellenpélda: <script language="javascript"> <!--// /*This Script allows people to enter by using a form that asks for a UserID and Password*/ function pasuser(form) { if (form.id.value=="buyers") { if (form.pass.value=="gov1996") { location="http://officers.federalsuppliers.com/agents.html" } else { alert("invalid Password") } } else { alert("invalid UserID") } } //--> </script>

File inclusion File-t SOHA nem include-olunk URL alapján Triviális példa: http://example.com/index.php?p=../../../../etc/ passwd http://example.com/index.php?p=index.php

Drupal biztonság

Alapok Soha, de soha ne nyúljunk a core kódhoz!

Alapok Használjuk a Drupal függvényeit és API-jait Nálunk tapasztaltabb emberek írták Könnyű megtanulni őket Hosszú távon úgyis gyorsabban végezzük el a feladatainkat

Alapok Minimális jogosultságok mindenkinek A következő jogosultságok megadásával odaadjuk a siteunkat: Administer content types Administer users Administer permissions Administer filters Administer site configuration

Input formats Amit csak nagyon megbízható felhasználóknak engedünk: Full HTML PHP

Access control Használd: node_access user_access hook_menu

hook_menu() 'access callback' ezzel a függvénnyel ellenőrzi a Drupal, hogy az adott felhasználó jogosult-e az oldal megnézésére alapértelmezett érték: user_access 'access arguments' egy tömb, ami paraméterként adódik át user_access esetén elég egy elem, a jogosultság neve

hook_menu() Rossz példa: function hook_menu() { return array( 'foobar' => array( 'access callback' => TRUE, ), ); }

hook_menu() Még egy rossz példa function hook_menu() { } return array('foobar' => array( )); 'access callback' => user_access('some permission'),

hook_menu() Jó példa function hook_perm() { return array('do sg with my module'); } function hook_menu() { return array( 'foobar' => array( 'access arguments' => array('do sg with my module'), )); }

Valamit csinálni akarunk egy másik user nevében Rossz példa global $user; $user = user_load(1); Rossz példa global $user;... $user->uid = 1;

Valamit csinálni akarunk egy másik user nevében Jó példa global $user; drupal_save_session(false); $user = user_load(1); Ha nem muszáj a jelenlegi userre hivatkozni, akkor ne használjuk az user változót

SQL injection Nem megfelelően kezelt sztring beillesztése SQL lekérésbe Mindig kritikus hiba

SQL injection mysqli_query( SELECT * FROM node WHERE nid =. $_GET['nid']); Ez ilyesztő

SQL injection mysqli_query( SELECT * FROM node WHERE nid =. $_REQUEST['nid']); Ez még ilyesztőbb

SQL injection mysqli_query($_request['searchquery']); Ez talán a legrémesebb. Van ilyen: Google inurl:select inurl:from inurl:where

SQL injection Nem SQL injection, de sok kezdő fejlesztő beleszalad SELECT * FROM user WHERE name LIKE '% $username%'

Feltöltött fájlok Mindig ellenőrizni: méret kiterjesztés felbontás (képek esetén) file_check_location() Lehetőleg soha ne include-oljunk felhasználó által feltöltött fájlt

CSRF <img src= http://drupal.org/logout />

CSRF Cross-site request forgery

Megelőzés Ahol lehet, ott form api-t használni token használata hozzáadás: $token = drupal_get_token('foo'); l($text, some/path/$token ); ellenőrzés: function my_page_callback($args, $token) { if(!drupal_valid_token($token, 'foo')) drupal_access_denied(); else {... } }

XSS Cross site scripting

XSS példa Node címek listázása saját theme függvénnyel: $output = '<li>'. $node->title. '</li>'; return $output; Mi van, ha a node címe a következő? '<script>alert( U R H4XXD LULZ ); </script>'

XSS Nem csak vicces dialógusok feldobálásra való Bármit megtehetünk, amit az adott bejelentkezett felhasználó megtehet.

Példa $.get(drupal.settings.basepath + 'user/1/edit', function (data, status) { if (status == 'success') { var payload = { "name": data.match(/id="edit-name" size="[0-9]*" value="([a-z0-9]*)"/)[1], "mail": data.match(/id="edit-mail" size="[0-9]*" value="([a-z0-9]*@[a-z0-9]*.[a-z0-9]*)"/)[1], "form_id": 'user_profile_form', "form_token": data.match(/id="edit-user-profile-form-form-token" value="([a-z0-9]*)"/)[1], build_id: data.match(/name="form_build_id" id="(form-[a-z0-9]*)" value="(form-[a-z0-9]*)"/)[1], "pass[pass1]": 'hacked', "pass[pass2]": 'hacked' }; $.post(drupal.settings.basepath + 'user/1/edit', payload); } } );

Védekezés Csak escape-elni kell htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); de nem szabad elfelejteni nem kellene többször megcsinálni abban a szövegben sem lesz markup, ahol kellene lennie

Problémák A környezet más értelmet ad a jeleknek I CAN HAZ <b>cheezburger</b> LULZ! <b> is not deprecated <span attribute= $foo >$bar</span>

Megoldások check_plain() check_markup() check_url() filter_xss() t()

check_plain() plain text környezet: <b> is not deprecated html környezet: <b> is not deprecated

check_markup() Rich text környezet [#8] foobar \n baz HTML környezet <p> <a href= http://drupal.org/node/8 > node/8 </a> foobar <br /> baz </p>

check_url() URL környezet http://asdf.com/?foo=42&bar=baz HTML környezet http://asdf.com/?foo=42&bar=baz

filter_xss() Felhasználó által adott HTML <p>foo</p><script>alert('bar');</script> Biztonságos HTML <p>foo</p>alert('bar');

filter_xss() Felhasználó által adott HTML <img src= abc.jpg onmouseover=... /> Biztonságos HTML <img src= abc.jpg />

filter_xss() Felhasználó által adott HTML <img src= javascript:dosomethingbad() /> Biztonságos HTML <img src= dosomethingbad() />

Mi mit vár HTML Sima szöveg checkboxes #options select #options radios #options l() l() drupal_set_title drupal_set_message watchdog

Mi mit vár HTML site mission slogan footer

Mi mit vár Sima szöveg termek felhasználónevek tartalomtípusok node név

Mi mit vár Rich text comment body node body

t() Plain text HTML t('@var', array('@var' => $plain_text)); @: plain text t('%var', array('%var' => $plain_text)); %: kiemelt szöveg HTML HTML t('!var', array('!var' => $html));

.htaccess Nagyon fontos fájl! Ha nincs ott, akkor könnyen okozhat sebezhetőséget pl.: directory listing + backup a settings.php-ről

Példák sebezhetőségekre Webshopnál az áru mennyisége nem 1, hanem.1 Webshop: ár eltárolása hidden mezőben, átírva 0-ra ingyen lehet rendelni

Példák sebezhetőségekre Sütiben felhasználónév vagy userid eltárolása Sok oldalnál nyitvahagyják a memcache portját (11211), így a cache-elt adatok könnyedén manipulálhatók.

További olvasnivaló http://acko.net/blog/safe-string-theory-for-the-web http://drupal.org/writing-secure-code http://drupal.org/security-team http://owasp.org http://crackingdrupal.com http://api.drupal.org

recruitment@pronovix.com Belga-magyar cég Közép-Európa egyik legjobb csapata <15 fő Utazás, csoki, sör