Автор Тема: Pam vs ssh bruteforce attacks  (Прочетена 4302 пъти)

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Pam vs ssh bruteforce attacks
« -: Sep 05, 2008, 13:06 »
Значи чат-пат нещо се размирисва около това че е много модерно разни хахори да сканират IP ranges, търсейки отворен ssh порт, където някакъв скрипт пробва да брутфорсва акаунти със слаби пароли. Това, което е още по-потресаващо е че това нещо има успеваемост, не знам на какво се дължи този факт, но хората явно няма никога да се научат да си правят по-сложни пароли. След като и аз не съм се научил да го правя, няма какво да мрънкам '<img'>

Та значи освен гореспоменатия (и най-сигурен според мен начин) същестуват и други решения:

* ssh порта се сменя така че глупавите автоматизирани скенери да не го ловят (тъпа идея, но донякъде работи)

* Слага се някакъв лимит на SYN пакетите с dstport=22 за минута и хостовете, които го надминат, биват REJECT-вани или дропвани. По принцип е идейно решение, с тази разлика че човек, който може да ти прати пакети с spoof-nat source адрес (например от същия етернет сегмент) може да ти сътвори една прекрасна мизерия, карайки те да вдигнеш хиляди правила в iptables. Ако това е рутер дето бута много трафик това може да се окаже малко гадно.

* Port-knocking. Идеята е много добра, но е също така ужасно неудобна. Освен което също до известна степен е податлива на DoS, макар и доста по-трудно.

* host-базиран контрол. Идейно и аз го предпочитам понякога. Обаче понякога все пак ти се налага да се връзваш от неавторизирано място и тогава почваш да се логваш от хост на хост докато стигнеш докъдето трябва.

И въпреки това, тези методи са си успешни. Нооо...аз обаче понеже съм тъп реших да потърся малко по-гъвкав (и податлив на гаври начин). За последното се изискват малко познания по С (малко, щото и аз не съм кой знае какъв програмист). Ииии спокойно, няма да пачваме sshd, въпреки че и там може човек да си даде поле за изява на ТНТМ-ските идиотии '<img'>

Значи една огромна част от линукс дистрибуциите така или иначе ползват PAM за да автентицират потребители пред дадени услуги. Което е много удобно. Ами какво ще стане ако вземем че си напишем наш си PAM модул, който да прави НАШИ си проверки? В такъв случай вариантите стават доста много '<img'>

Този случай, който аз ще разгледам сега е доста опростен, значи идеята при мен е един ssh клиент да бъде допуснат САМО ако на неговият хост нещо слухти на определен порт. Това е глупаво, но пък много лесно за реализация. Определено може да се разшири по много други начини (примерно по друг сокет да се обменя допълнителна информация за автентикация, с curl да се дърпа от някъде уеб документ и да се гледа в него за нещо, да се проверява за активационен мейл и кой знае колко още идиотски идеи).

Не мисля да навлизам особено в детайли за PAM модулите - накратко тук:
http://www.linuxdevcenter.com/pub/a/linux/2001/09/27/pamintro.html

И по този повод ето го сорса на моя примерен PAM модул:

Примерен код

#include <security/pam_modules.h> //pam
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <syslog.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>

#define portno 7000 // change if needed

PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags ,int argc , const char **argv )
{
    int retval;
    struct sockaddr_in sin;
    struct hostent *host;
    int len;
    int sd;
    const char *token=NULL;

    retval=pam_get_item(pamh,PAM_RHOST,&token); //getrhost

    host = gethostbyname(token); // resolve
    sd = socket(AF_INET, SOCK_STREAM, 0);
    memcpy(&sin.sin_addr.s_addr, host->h_addr, host->h_length);
    sin.sin_family = AF_INET;
    sin.sin_port = htons(portno);
    // someone listening?
    if (connect(sd, (struct sockaddr *)&sin, sizeof(sin)) < 0)
    {
        syslog(1,"Remote host %s does not listen on port %d\n",token,portno);
        return PAM_AUTH_ERR;
    }
    return PAM_SUCCESS;
}


Компилираме го и го копираме където му е мястото:

Примерен код

# cc pmt.c -lpam -shared -o pmt.sо
# cp pmt.so /lib/security/


И добавяме следния ред в /etc/pam.d/ssh:

Цитат

auth    required        pmt.so


И това е достатъчно '<img'>

Оттам нататък може да почваме с пробите:

Цитат

gat3way:~/pamtest# ssh gat3way@localhost
gat3way@localhost's password: (въвеждаме_правилна_парола)
Permission denied, please try again.
gat3way@localhost's password:
^C
gat3way:~/pamtest# tail -n 3 /var/log/auth.log
Sep  5 12:55:02 gat3way sshd[27928]: Remote host localhost does not listen on port 7000
Sep  5 12:55:02 gat3way sshd[27928]: pam_unix(ssh:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=localhost  user=gat3way
Sep  5 12:55:04 gat3way sshd[27928]: Failed password for gat3way from 127.0.0.1 port 37452 ssh2


Не иска да ни пусне. Мммм, нека в друга конзола пуснем netcat да ни слухти на порт 7000:

Цитат
gat3way@gat3way:~$ nc -l -p 7000


и да пробваме пак:

Цитат

gat3way:~/pamtest# ssh gat3way@localhost
gat3way@localhost's password:
Linux gat3way .....
^D
gat3way:~/pamtest# tail  /var/log/auth.log
...
Sep  5 12:58:29 gat3way sshd[27988]: Accepted password for gat3way from 127.0.0.1 port 45824 ssh2


Воала.

Сега разбира се това горе е прекален прост случай, не е много удобно (щото трябва преди да вържеш ssh трябва да осигуриш нещо да слухти там на клиентската машина), не е практично (ако си зад НАТ кво правим?) и не е чак толкова сигурно (злия хахор може и да забележи, че отсреща някой се опитва да се върже обратно към него).

Но никой не е казал, че нещата трябва да се реализират точно така. Както казах има огромна свобода по отношение на това каква проверка може да се реализира. Може например да се напише да ти иска 2 пъти парола, първият път да каже че е грешна, на втория да те пусне (идейно според мен)...може много неща може.

В тоя ред на мисли приемам идеи '<img'>



Активен

"Knowledge is power" - France is Bacon

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Pam vs ssh bruteforce attacks
« Отговор #1 -: Sep 05, 2008, 13:42 »
Направи text-based-captcha '<img'>
Примерно колко прави 6 * 6 '<img'>
хахах
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Pam vs ssh bruteforce attacks
« Отговор #2 -: Sep 05, 2008, 13:47 »
Няма как да стане '<img'> За целта трябва да се пач-не sshd-то (и вероятно и клиента). PAM осъществява само автентикационен механизъм, нямам как PAM модула да накара ssh да ти изпише "колко е 6*6" и т.н....то си е просто един интерфейс, подават му се някакви credentials и то на базата на тях те одобрява или не.
Активен

"Knowledge is power" - France is Bacon

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Pam vs ssh bruteforce attacks
« Отговор #3 -: Sep 05, 2008, 14:30 »
Това, дето слухти на порт 7000, може ли да казва "Здрасти, аз съм твойта леля!" ? Ако не го каже, няма логин.
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Pam vs ssh bruteforce attacks
« Отговор #4 -: Sep 05, 2008, 14:38 »
Мда, това може, с дописване на още 5-6 реда код. Това ще го направи малко по-сигурно, от друга страна другите недостатъци на този подход (клиент зад НАТ) няма да се изчистят '<img'>

Днеска ми хрумна една архиидиотска идея '<img'> През curl или с обикновен клиентски сокет да дърпаш индекс-а на линукс-бг, ако си писал наскоро във форума (никът ти се предполага че е същия като потребителското име), значи те пуска. Ако не си писал, не те пуска '<img'>

Обаче надали това би се харесало на модераторите на форума, ахах.
Активен

"Knowledge is power" - France is Bacon

trip

  • Напреднали
  • *****
  • Публикации: 70
  • Distribution: FreeBSD
  • Window Manager: GNOME
    • Профил
Pam vs ssh bruteforce attacks
« Отговор #5 -: Sep 05, 2008, 16:06 »
Аве мой колко опита им трябват за да ти нацелят паролата. Да не би да се логваш с роот '<img'> За denyhosts чувал ли си?
Активен

Lenovo ThinkPad R61i : Fedora 12 GNOME

lkr

  • Напреднали
  • *****
  • Публикации: 81
    • Профил
Pam vs ssh bruteforce attacks
« Отговор #6 -: Sep 05, 2008, 16:40 »
Горното мнение просто няма смисъл да го коментирам.А до gat3way, чакаме challenge v3.0 !
Активен

tarator

  • Напреднали
  • *****
  • Публикации: 849
    • Профил
Pam vs ssh bruteforce attacks
« Отговор #7 -: Sep 05, 2008, 16:59 »
Това ще работи само ако клиента не е зад някакъв firewall. По-добре си напиши някакво разширение за ssh, което да използва същия сокет за допълнителни проверки. Пък де да знам, може и само с pam да става, отдавна не съм си играл с него. Преди 3-4 години, когато трябваше да ходя до БГ и не бях сигурен откъде ще мога да се логвам, си бях играл да си пиша pam module за прост challenge-response. После намерих нещо готово, включително и с приложение за мобилния ми телефон да генерира response-a който трябва да се въведе.



Активен

A gentleman is one who is never rude unintentionally. - Noel Coward

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Pam vs ssh bruteforce attacks
« Отговор #8 -: Sep 05, 2008, 17:02 »
Честно казано denyhosts не бях чувал, иначе доколкото разбирам е нещо от сорта на fail2ban.

Не съм мислил още за трета част де '<img'> Обаче днес много случайно четох един документ много свързан с това, което трябваше да се прави във втората част и ми стана забавно '<img'>

Ми предполагам че трябва да ми дойде вдъхновението да измисля нещо забавно '<img'>
Активен

"Knowledge is power" - France is Bacon

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Pam vs ssh bruteforce attacks
« Отговор #9 -: Sep 05, 2008, 17:04 »
Цитат (tarator @ Сеп. 05 2008,17:59)
Това ще работи само ако клиента не е зад някакъв firewall.

Мдам. Firewall-ите и NAT-ващите рутери чупят идеята '<img'>

Цитат
По-добре си напиши някакво разширение за ssh, което да използва същия сокет за допълнителни проверки. Пък де да знам, може и само с pam да става, отдавна не съм си играл с него.


Това е идейно, обаче малко се разваля идеята да се ползва отвсякъде  с обикновен клиент. Иначе само с pam...трудно. Мене ми хрумна през главата да ти иска два пъти паролата, първия път да ти връща AUTH_ERR, втория път да те пуска. Обаче това ще налага някъде да се пази някаква таблица пазеща състояние на сесиите или нещо от сорта, не че е сложно де, това даже е добър вариант. Едва ли тези дето се опитват да налучкват пароли ще го правят по два пъти с една и съща такава '<img'>



Активен

"Knowledge is power" - France is Bacon

senser

  • Напреднали
  • *****
  • Публикации: 1328
    • Профил
Pam vs ssh bruteforce attacks
« Отговор #10 -: Sep 05, 2008, 18:34 »
Цитат (gat3way @ Сеп. 05 2008,17:04)
Мене ми хрумна през главата да ти иска два пъти паролата, първия път да ти връща AUTH_ERR, втория път да те пуска. Обаче това ще налага някъде да се пази някаква таблица пазеща състояние на сесиите или нещо от сорта, не че е сложно де, това даже е добър вариант. Едва ли тези дето се опитват да налучкват пароли ще го правят по два пъти с една и съща такава '<img'>

дали не може да се комбинира и с изискването на някаква клавишна комбинация ........
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Pam vs ssh bruteforce attacks
« Отговор #11 -: Sep 05, 2008, 18:51 »
Ммм когато автентицираш ssh сесии не мисля...ако е за локални logins предполагам е възможно. Все пак pam се използва и за логване в системата с пръстови отпечатъци и тем подобни глупости...обаче това става локално. SSH suite-a не е предвидил да се изпраща нещо повече от ключове или пароли, със сигурност не и на клавишни комбинации де '<img'>
Активен

"Knowledge is power" - France is Bacon

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Нерви с dictionary и bruteforce атаки към FreeBSD
Настройки на софтуер
bubba 2 3283 Последна публикация Jan 05, 2006, 22:58
от acidburn
SSH Сървър - Защита против bruteforce/dict атаки
Настройка на програми
staco 19 7600 Последна публикация Feb 05, 2010, 00:21
от Acho
Play Station 3 и BruteForce ?
Системна Сигурност
chen_dzen 3 2823 Последна публикация Sep 29, 2010, 20:07
от gat3way