[gelöst] Wie kann ich meine XML RPC Schnittstelle vor Bruteforce (Hacking) schützen?
am 20.03.2014 - 15:46 Uhr in
Hallo ihr,
lasse in meinem default Drupal Script den Hook _xmlrpc() laufen.
Damit mache ich ja eine XML RPC Schnittstelle auf. Dahinter habe ich nun einiges an Funktionen hinterlegt. Ich mache mir da jetzt ein bischen sorgen das jemand mit einer selbst geschriebenen Software einen Bruteforceangriff durchführt und vielleicht useraccount hackt.
habe z.B. eine XMLRPC Funtion:
<?php
function _rep_user_authenticate($username, $password)
{
try
{
return user_authenticate($username, $password);
}
catch (Exception $e)
{
watchdog('RPC: _rep_user_authenticate', $e->getMessage() );
return 0;
}
}
?>
Tja, wenn man da lange genug drauf rumprobiert kriegt man schon das Passwort raus.
Wie kann ich also mein Script/Apache vor solchen Angriffen schützen? Denke da so das die Zugriffe gezählt werden und nur begrent in einer Zeit für User zur Verfügung stehen.
Denke da wird's mit Sicherheit schon fertige Lösungen für geben!?!?!?
Gruß
-Peter
- Anmelden oder Registrieren um Kommentare zu schreiben
so gehts!
am 10.04.2014 - 12:53 Uhr
tja, erstmal Danke für eure Hilfe!! :(
für diejenigen die es interessiert wie es geht:
<?php
function HOOK_xmlrpc() {
// Jeder HTTP auf meinen RPC wird geloggt
$ip = ip_address();
insert_rpc_access($ip);
if(check_drop_connection($ip))
return false;
....
}
?>
dazu jetzt noch 2 Funtionen:
<?php
/*
* Der Table muss vorher erstellt werden.
* CREATE TABLE rpcaccess ( ip VARCHAR(15), stempel TIMESTAMP )
*/
function insert_rpc_access($from_ip)
{
db_query("INSERT INTO rpcaccess VALUES(:ip,now())", array(':ip' => $from_ip ));
}
function check_drop_connection($from_ip)
{
$data = 0;
$r = db_query("SELECT COUNT(ip) AS summe FROM rpcaccess WHERE ip=:ip AND stempel BETWEEN (DATE_SUB(NOW(),INTERVAL 10 SECOND)) AND NOW()", array(':ip' => $from_ip));
foreach($r as $result)
{
$data = $result->summe;
}
if($data>=10)
return true;
else
return false;
}
?>
Damit kann man den Server schützen!
Gruß
-Peter ohne Sicherheitslücke
Hallo Peter,sorry aber das
am 10.04.2014 - 15:52 Uhr
Hallo Peter,
sorry aber das was Du da machst, ist gelinde gesagt gar nicht gut.
Um wirklich Sicherheit zu haben solltest Du den XML-RPC Service endpoint von Drupal verwenden,
Da hat es alle Sicherheitsmassnahmen dabei!
So wäre es richtig:
system.connect
gibt dir eine anonyme Session zurück, um sicher zu gehen dass es kein bot ist muss diese nun bei user.login mitgesendet werden.
Das ist gegen DOS Attacken
user.login
gibt Dir die Session eingeloggten user zurück ansonsten Invalid user or Password
Wenn er dreimal falsch einloggt wird er automatisch für eine Zeit gesperrt.
Das ist gegen Brute-Force
Nun hast Du die Session des eingeloggten User, diese sendet Du nun bei allen Deinen aufrufen mit.
Wenn deine xml-rpc z.B: add(int,int) ist solltest Du add(string,int,int) wobei string die mitgesendete user Session ist
und Du prüfst nun immer ob die mitgesendete Session gleich der Session des Users ist.
Das ist gegen nicht authorisierte Zugriffe auf Deine Funktionen!
MfG
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Hallo Robert, oh. das muss
am 11.04.2014 - 08:35 Uhr
Hallo Robert,
oh. das muss ich mir erstmal ansehen.
Vielen lieben Dank für deine Hilfe.
Gruß