Программное обеспечение является посредником между человеком и компьютером и переводит человеческое намерение посмотреть фильм в режиме онлайн или почитать блог на язык, понятный машине. Компьютеры— это просто эволюционировавшие калькуляторы. На заре развития вычислительной техники ученые осознали, что электрические импульсы можно использовать для представления единиц, а отсутствие импульса — нулей, как точки и тире в азбуке Морзе. Десятичную систему счисления, которую используют люди, потому что у нас десять пальцев, легко перевести в двоичный код так, чтобы при нажатии на электронном калькуляторе кнопки «5» посылалась цепочка импульсов — 101 — пятерка в двоичной системе счисления. Простое электронное сообщение преобразовывается в электрические импульсы, которые передаются по медным проводам и оптоволоконным кабелям, а затем преобразуются в читабельные для нас сообщения. Для того чтобы это происходило, кто-то должен создать инструкции, понятные компьютеру. Эти инструкции пишутся на языках программирования как компьютерный код, а люди, которые пишут код, как правило, делают ошибки.
Очевидные ошибки исправляются, иначе программа не функционирует так, как нужно, но менее явные остаются и могут быть позднее использованы для получения доступа к коду. Поскольку вычислительные системы работают быстрее, компьютерные программы становятся сложнее, чтобы использовать все возможности новых скоростей и мощности. В Windows 95 было менее 10 миллионов строк кода, в Windows ХР их уже 40 миллионов, а в Windows Vista — более 50. За десять с небольшим лет количество строк увеличилось в пять раз, и во столько же возросло количество ошибок. Многие из этих ошибок позволяют хакерам заставлять программу делать то, для чего она не предназначалась. Для того чтобы использовать популярное программное обеспечение в собственных целях, например получить статус администратора, хакеры разрабатывают небольшие приложения — апплеты, которые учитывают особенности программного обеспечения, слабые места и ошибки конфигурации системы. Поскольку компьютерная преступность — это большой бизнес, подготовка к отражению кибератак финансируется столь же хорошо, а хакеры и кибервоины постоянно разрабатывают новые способы обмануть системы. Приложения, создаваемые хакерами, называются вредоносным ПО, или мэлвером. В 2009 году новая разновидность мэлвера появлялась в киберпространстве в среднем каждые 2,2 секунды. Посчитайте: три-четыре крупнейшие компании по производству антивирусных программ пользуются сложнейшими схемами отслеживания нового мэлвера, но они находят и блокируют только одну из десяти вредоносных программ. Пока «фикс» — компонент программного обеспечения, блокирующий мэлвер, — доходит до клиентов антивирусной компании, проходят дни, а иногда недели. На протяжении этого времени коммерческие компании, правительственные учреждения и рядовые пользователи остаются беззащитными.
Часто вредоносные программы поджидают вас на совершенно безобидных сайтах. Вы заходите на сайт вашингтонского научного центра, чтобы ознакомиться с последними исследованиями по важной политической проблеме. Научным центрам, как известно, денег вечно не хватает, поэтому они не уделяют достаточного внимания созданию безопасных и надежных сайтов. Пока вы читаете о недавних махинациях вокруг проблем здравоохранения и прав человека в Китае, небольшая вредоносная программка загружается на ваш компьютер. Вы об этом не знаете, но вашему новому «другу» из Белоруссии известна каждая клавиша, которую вы нажимаете. Что будет, когда вы зайдете на свою личную страницу в банке или в защищенную сеть своего работодателя? Нетрудно догадаться.
Самая распространенная ошибка — переполнение буфера. Код веб-страницы должен быть написан так, чтобы пользователь имел возможность ввести фиксированный объем данных, например имя пользователя и пароль. Вспомните Twitter, где вы за раз можете ввести не более 140 символов. Но если разработчик кода забывает ограничить количество символов, пользователь может ввести что-нибудь лишнее. И вместо имени пользователя и пароля там окажутся несколько строк кода, дающих вам права администратора. Представьте, как эти команды оказываются в полях ввода персональных данных пользователя и превращаются в приложение. Ваша страничка начинает думать, что это вошел системный администратор, и — пинг! — нарушитель внутри.