База данных под прицелом Крис Касперски aka мыщъх Спецвыпуск: Хакер, номер #047, стр. 047-064-2 В несколько упрощенном виде процедура шифрования выглядит так: ЛИСТИНГ // P1/P2 – 4 левых/правый байта парольного хэша соответственно // C1/C2 – 4 левых/правый байта random-string соответственно seed1 = P1 ^ C1; seed2 = P2 ^ C2 ; for(i = 1; i <= 8; i++) { seed1 = seed1 + (3*seed2); seed2 = seed1 + seed2 + 33; r[i] = floor((seed1/n)*31) + 64; } seed1 = seed1+(3*seed2); seed2 = seed1+seed2+33; r[9] = floor((seed1/n)*31); checksum =(r[1]^r[9] || r[2]^r[9] || r[7]^r[9] || r[8]^r[9]); Нестойкие механизмы аутентификации встречались и в других серверах, однако к настоящему моменту практически все они давно ликвидированы. Перехват пароля Для авторизации на сайте в подавляющем большинстве случаев используются нестойкие механизмы аутентификации, разработанные непосредственно самим Web-мастером и передающие пароль в открытом виде. Как следствие, он может быть легко перехвачен злоумышленником, забросившим на одну из машин внутренней сети или DMZ-зоны снифер или создавшим точную копию атакуемого Web-сервера, для заманивания доверчивых пользователей – тогда логин и пароль они введут сами. Многие сервера хранят информацию об авторизации в кукисах (cookie), находящихся на машинах удаленных пользователей, и, вместо того чтобы ломиться на хорошо защищенный корпоративный сервер, взломщик может атаковать никем не охраняемые клиентские узлы. Главная трудность заключается в том, что их сетевые координаты наперед неизвестны и атакующему приходится тыкаться вслепую. Обычно эта проблема решается массированной рассылкой почтовой корреспонденции с троянизированным вложением внутри по многим адресам – если повезет, то среди пользователей, доверчиво запустивших трояна, окажется хотя бы один корпоративный клиент. Ну а извлечь куки – уже дело техники. Некоторые серверы баз данных (в частности, ранние версии MS SQL), автоматически устанавливают пароль по умолчанию, предоставляющий полный доступ к базе и позволяющий делать с ней что угодно (у MS SQL этот пароль "sa"). Навязывание запроса, или SQL-инъекция Типичный сценарий взаимодействия с базой данных выглядит так: пользователь вводит некоторую информацию в поля запроса, оттуда ее извлекает специальный скрипт и преобразует в строку запроса к базе данных, передавая серверу ее на выполнение: ЛИСТИНГ $result = mysql_db_query("database", "select * from userTable where login = '$userLogin' and password = ‘$userPassword' "); Здесь $userlogin – переменная, содержащая имя пользователя, а $userPassword – его пароль. Обрати внимание, что обе переменные размещены внутри текстовой строки, окаймленной кавычками. Это необычно для Си, но типично для интерпретируемых языков вроде Perl и PHP. Подобный механизм называется интерполяцией строк и позволяет автоматически подставлять вместо переменной ее фактическое значение. |