ot Vladsun(30-10-2006)
reiting (27)
[ dobre ]
[ zle ]
Variant za otpechatvane
TSelta na statiiata e da opishe nachin za distantsionno i otvariane/zatvariane na opredeleni portove pri tova s visoko nivo na sigurnost. Izpolzva se tehnika narechena v literaturata kato "port knocking", t.e. chrez strogo opredelena kombinatsiia ot opiti za vruzki kum opredeleni portove na otdalechenata mashina se promeniat pravilata na zashtitnata i stena, kato po tozi nachin se dava dostup do opredeleni survurni prilozheniia.
Po sushtestvo opisanata tehnika mozhe da se izpolzva za mnogo i razlichni tseli, no tuk shte razgledame prilozhenieto i za protivodeistvie sreshtu ataki nasocheni kum SSH prilozheniiata. Povecheto administratori vizhdat ogromni logove za neuspeshni (dai bozhe;) ) opiti za SSH login chrez izpolzvane na slabi paroli i chesto sreshtani potrebitelski imena. S uvelichavaneto na broia na potrebitelite, koito se nuzhdaiat ot SSH dostup do konzolata se uvelichava i veroiatnostta ot probiv. Nai-lesnoto reshenie bi bilo da se otkazva TCP vruzka na sluchainite potrebiteli (prim. po IP adres), no tova bi bilo svurzano s nedostatuchno dobra guvkavost na upravlenieto na potrebitelite.
Poradi tova smiatam, che predlozhenoto tuk reshenie (ili po-skoro implementatsiia na reshenieto - ideiata ne e moia :) ) e dosta po-dobro po otnoshenie kakto na sigurnost, taka i na guvkavost. Vse pak, realizatsiiata sus sigurnost ne e idealna i podlezhi na promiana.
Sistemni iziskvaniia
Ideiata e realiziran chrez izpolzvane na Perl modulite i iptables s dobaven "recent match".
Instalirane i upotreba
Na otdalechenata mashina (kum koiato iskame da se svurzhem) se kopirat slednite dva Perl faila:
knockoff.pl |
$exist = `iptables -nL INPUT | grep SSH_KNOCK`;
if ($exist ne '')
{
`iptables -D INPUT -m state --state NEW -p tcp -j SSH_KNOCK`;
`iptables -F SSH_KNOCK`;
`iptables -X SSH_KNOCK`;
print "[+] Port knocking rules deactivated.\n";
}
else
{
print "[-] Port knocking rules have been already deactivated.\n";
} |
knockon.pl |
if (@ARGV < 1) {
print "Usage:\r\n";
print "Specify passkey! \r\n\r\n";
exit();
}
$port = 0;
srand($ARGV[0]);
$exist = `iptables -nL INPUT | grep SSH_KNOCK`;
if ($exist ne '') {
`iptables -F SSH_KNOCK`;
} else {
`iptables -N SSH_KNOCK`;
`iptables -I INPUT -m state --state NEW -p tcp -j SSH_KNOCK`;
}
`iptables -A SSH_KNOCK -p tcp --dport 22 -m recent --rcheck --name SSHK -j ACCEPT`;
`iptables -A SSH_KNOCK -m recent --rcheck --name SSHK -j RETURN`;
for ($i=0; $i<5; $i++) {
$port = int(rand(40000) + 1024);
$prev_port = $port - 1;
$next_port = $port + 1;
`iptables -A SSH_KNOCK -p tcp --dport $port -m recent --name SSHK --set -j DROP`;
`iptables -A SSH_KNOCK -p tcp --dport $prev_port -m recent --name SSHK --remove -j DROP`;
`iptables -A SSH_KNOCK -p tcp --dport $next_port -m recent --name SSHK --remove -j DROP`;
}
`iptables -A SSH_KNOCK -p tcp --dport 22 -j DROP`;
print "[+] Port knocking rules activated.\n"; |
A na lokalnata mashina se kopira faila:
knock.pl |
use IO::Socket;
if (@ARGV < 2) {
print "Usage:\r\n";
print "Specify host !\r\n";
print "Specify passkey! \r\n\r\n";
exit();
}
$serv = $ARGV[0];
$serv =~ s/http:\/\///ge;
$port = 0;
srand($ARGV[1]);
for ($i=0; $i<5; $i++) {
$port = int(rand(40000)+1024);
$sock = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>"$serv", PeerPort=>"$port", Timeout=>"1");
close($sock);
}
print "[+] Port knocking finished.\n";
$sock = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>"$serv", PeerPort=>"22")
or die "[-] Port 22 - SSH NOT open.\n";
close($sock);
print "[+] Post 22 - SSH is now open.\n"; |
Za puskaneto na opisanata zashtitna sistema se izpulniava na otdalechenata mashina:
knockon.pl 12345
kudeto 12345 e poreditsa ot chisla, koiato shte se izpolzva za razreshavane na dostupa ot lokalnata mashina. Sled izpulniavaneto na tazi komanda port 22 pri skanirane se opredelia kato "filtriran" i SSH vruzka ne mozhe da se osushtestvi.
Za da se razreshi SSH dostupa ot lokalnata mashina se puska:
knock.pl 12345
TSifrovite nizove triabva da sa ednakvi za da se poluchi razreshenie.
S tova port 22 na otdalechenata mashina e otvoren pri tova samo za IP adresa, ot koito sme poiskali razreshenie za dostup.
Za da aktivirame zashtitata otnovo e neobhodimo predi da izlezem ot shela da startirame pak:
knockon.pl 12345
Zashtitata e taka napravena, che pri posledovatelno skanirane na portove da ne se dava dostup. Pri skanirane sus sluchaino izbran red na portovete veroiatnostta za davane na dostup e izklyuchitelno malka.
Problemi za koito se znae:
1) Za da se startira zashtitata ot drug potrebitel osven root e neobhodimo da se dadat prava za izpulnenie na iptables kato root - prim. sus sudo ili chrez chmod 6755, koeto ne e dobre :(
2) Mozhe da se poluchi pripokrivane na razreshavashtite i zabraniavashtite portove pri generiraneto na psevdo-sluchainata poreditsa - izberete drug kod :)
<< Kak da formatirame Windows dialove | amaroK - next generation multimedia player >>
|