Постоянно слышу вопрос, ни разу не видел хорошего ответа. Как-то даже видел книгу с таким названием. В ее первой главе автор на полном серьезе советовал почувствовать себя дерьмом, чтобы преисполниться нужных эмоций и настроиться на взлом. Что ж, удачи тем, кому этот способ понравился, а у меня другое видение проблемы. Рискну высказать.
Хакер – человек, способный выжать все возможное из того, что у него в распоряжении. Поэтому, имея такой же доступ к системе, что и обычный человек, он иногда способен ее взломать (именно «иногда», бывают случаи, когда систему нельзя взломать в принципе). Вот и все, что отличает хакера от простого смертного. Соответственно инструкция по апгрейду от простого смертного до хакера проста - измените себя так, чтобы выделенные высказывания относительно вас были справедливы...
Способность получить все, что теоретически возможно получить, дается доскональным знанием системы и особым складом ума, не пропускающим никакие варианты, особенно нетривиальные. Обо всех составляющих по порядку.
Доскональное знание системы – это понимание того, как система работает. Для понимания работы программы идеально подходят исходники в сочетании с умением их читать, то есть понимать алгоритм по тексту программы. Опытные хакеры способны понимать программу, написанную на языке, который они никогда в жизни не видели.
Не всегда исходники доступны, тогда может пригодиться знание ассемблера и отладчиков, которое позволяет понимать алгоритм любой программы, находящейся на подконтрольном компьютере. Это тяжелее. В самом тяжелом (и самом частом) случае, когда программа находится на удаленном компьютере, и хакер ничего о ней не знает, приходится лишь догадываться, как она устроена. Тут требуется опыт анализа и написания аналогичных программ и программ вообще. Короче говоря, хакеру совсем не помешает быть опытным программистом.
У серверных программ есть еще одна особенность – полезно знать протокол, по которому она работает. Протокол – набор правил, по которому общаются стороны (программы, компьютера, системы). Он нужен для того, чтобы стороны могли понимать друг друга. Большинство протоколов хорошо описаны авторами, лишь изредка приходится сталкиваться с недокументированными протоколами и догадываться, что они из себя представляют. Описания большинства протоколов есть на сайтах RFC, вот один из них: http://the.rfceditor.org/
У протоколов могут быть слабые места - проблема, которую автор программы не может исправить – он просто выбрал не тот протокол, возможно, он сам не знает его слабых мест. А вот вам их знать надо.
Бывает, что программист допускает отклонения от реализации протокола. Чтобы найти их, просто попробуйте сказать другой стороне не то, что она ждет, и увидите, чем это кончится. Идеально написанная программа должна ответить «ошибка протокола», но при неправильной реализации может произойти нечто, чего не предусмотрел создатель, и что окажется полезно хакеру.
Полезно знать об ошибках, допускаемых разработчиками, и о методах их использования (exploit). Детальная информация о них излагается в так называемых security advisory, которые можно встретить на сайтах серьезных групп, занимающихся проблемами безопасности. Всемирная база данных advisory есть на wwwsecurityfocus.com, полезно почитать.
Это все, что касается знаний. Теперь - о мозгах. Мозги не должны быть застарелыми, иначе дальше использования известных дырок и средств автоматизированного взлома «хакер» не пойдет. Для тестирования застарелости мозгов предлагаю такую шуточную задачку про обкуренную ласточку . Требуемый уровень знаний – 5 класс, однако, чем человек старше, тем сложнее ее решить…
Поезд едет из А в Б. Расстояние – 120 км. Скорость поезда – 40 км/час. Навстречу поезду из Б вылетает ласточка со скоростью 60 км/час, долетает до поезда, разворачивается и летит обратно в Б, разворачивается, летит к поезду… Так до тех пор, пока оба они не прибудут в Б. Вопрос: какое расстояние пролетела ласточка?
Второе требование – любовь к brainfucking’у. Переводить слово целиком не буду, скажу только, что brain – «мозги». Так вот, хакер обязан любить brainfucking, иначе не сможет заниматься исследованиями, без которых он – жалкая, ничтожная личность, паразитирующая на чужих достижениях .
Последнее требование, о котором я скажу, скорее психологическое. Хакеру предстоит устоять перед славой, не «спопситься», ведь понтоваться перед толпой на порядок проще, чем заниматься серьезными исследованиями. Если он не устоит, то станет просто клоуном, работающим на потеху зрителям, и на этом его развитие остановится.
Если после прочтения текста вы все еще не передумали становиться хакером - вперед! Удачи.