Старый 31.08.2010, 12:07   #1
-Gory King-
 
Аватар для -Gory King-
 
Регистрация: 25.07.2010
Сообщений: 36
Репутация: 4
По умолчанию Один тип уязвимостей Питон программ

Один тип уязвимостей Питон программ.

Авторы: prusle и djp.


Неустойчивость к ошибкам библиотечных функций языка Си (таких как stscpy,
sprintf, strcat и многих других) позволяет получать полный контроль над ОС,
написанными на Си. Изобретательность хакеров проявилась в изобретении методов
эксплуатации таких ошибок - использовании их в своих интересах: для получения
несанкционированного доступа к ОС. Статья Aleph One "Smashing stack for fun
and profit" определила историю компьютерного подполья на десятилетия.

Во многих языках программирования существуют изъяны. Задачей хакера является
эксплуатация таких изъянов в своих целях - несанкционированном доступе
к информации. В этой статье мы расскажем об эксплуатации одного типа уязвимостей
Питон - программ. Этим изъяном Питона есть добавление в списочный тип
ссылки на другой списочный тип вместо копирования элементов этого списочного
типа при вызове метода .append()

Простейший пример с изъяном:
Код:
#------------------------EXAMPLE 1: test1.py--------------
array1 = ****
array2 = [1,2,3,4,5]
array1.append(array2)
print array1

array2[0]=9
print array1
#---------------------END OF EXAMPLE 1--------------------
Запускаем: python test1.py
Фактический вывод на экран:
Код:
****1, 2, 3, 4, 5****
****9, 2, 3, 4, 5****
Ожидаемый вывод на экран:
Код:
****1, 2, 3, 4, 5****
****1, 2, 3, 4, 5****
Модификация нулевого элемента второго массива, добавленного в первый массив,
модифицирует первый массив. Это происходит из-за того, что при добавлении
в список другого списка добавляется ссылка на список, а не элементы списка.
Модификация элементов приводит к изменению значения по ссылке. Этого программист
может не ожидать и допустить такую ошибку в программе.

Можно ли эксплуатировать такого типа изъяны? Конечно можно. Докажем это
гипотетическим примером уязвимого FTP сервера на питоне.
Для простоты опустим сетевой код и приведём лишь ключевые фрагменты
уязвимой программы:

Код:
#------------------EXAMPLE 2:vulnerable FTP daemon fragments-------
#initialization
#...
LogedInUsers = ****
UserInfo = ["","",0]
#...

#authentication
def aythenticate(socket):
	#read Login
	#read Password
	#determine Time of login
	#...
	UserInfo[0] = Login
        UserInfo[1] = Password
        UserInfo[2] = Time
	if PasswordGood(Login, Password):
		LogedInUsers.append(UserInfo)

	else:
		#send "Bad password" message
		#next login attempt

#...
#----------------------------END OF EXAMPLE 2----------------------
Рассмотрим работу такого гипотетического кода. Допустим пользователь root
залогинился с паролем root123. К серверу, вычислив что рут на сервере методами
социальной инженерии, подключается хакер с Login=l1th4k3 и Password="".
Login и Password модифицируют переменную UserInfo, ссылка на которую сохранена
в переменной LogedInUsers. Хакер попадает в список залогиненых пользователей
на позицию записи для рута! Он залогинен без пароля. При хорошем стечении обстоятельств
ещё и с привилегиями рута! FTP сервер на питоне уязвим.


Вывод: Язык Питон уязвим к ошибкам с указателями как и язык Си.
Критерием потенциально-уязвимого кода на питоне есть объединение двух
условий: в список добавляется переменная список, эта переменная-список
после модифицируется. Этот критерий позволяет полуавтоматический аудит
питон-программ.

Звёздочками **** редактор заменил пустые квадратные скобки и двойные квадратные скобки.

Удачи в аудите кода, бэкдорьте *всё*
-Gory King- вне форума   Ответить с цитированием
Старый 31.08.2010, 15:17   #2
Nightmare
Banned
 
Регистрация: 06.07.2010
Сообщений: 162
Репутация: 10
По умолчанию

Респект, наконец то стали появляться уязвимые функции на других интерпрераторах, это не может не радовать.
Nightmare вне форума   Ответить с цитированием
Старый 31.08.2010, 15:51   #3
fury
 
Регистрация: 11.07.2010
Сообщений: 9
Репутация: 1
По умолчанию

Справедливости ради надо отметить, что в данном случае "изъян питона" - сильно сказано. Копирование ссылки - вполне нормальное поведение (array2 - это же и есть ссылка).

Хотя возможность такой уязвимости не исключена, если код написан под неизгладимым впечатлением от списка банальностей "import this"
fury вне форума   Ответить с цитированием
Старый 01.09.2010, 07:34   #4
Nosaer
 
Регистрация: 06.07.2010
Сообщений: 8
Репутация: 1
По умолчанию

Логично было бы в таких случаях использовать кортежи
Nosaer вне форума   Ответить с цитированием
Старый 01.09.2010, 22:51   #5
Delimiter
 
Регистрация: 12.08.2010
Сообщений: 47
Репутация: 4
По умолчанию



фигня:>>Вывод: Язык Питон уязвим к ошибкам с указателями как и язык Си.

В языке Си указатели были тем самым решением от переполнения буфера , что позволяло работать
с динамическими буферами, в отличие от статических массивов! Но и это не суть .... сами структуры
для хранения данных не несут РИСКА .... РИСК несут функции их заполняющие
scanf(); sprintf(); и другие для построчного ввода не контролирующие размеры массивов!


УКАЗАТЕЛЬ -ЭТО АДРЕС ПАМЯТИ реализуется он местом хранения для ОНОГО, он не может нести угрозы!!! Понятно что туда можно и НОЛЬ записать
... но это будет ошибкой программиста вызвавшего АКСЕСС ВИОЛЭЙШИН
Delimiter вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot