среда, 5 июня 2013 г.

Усложняем жизнь злоумышленникам

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

Например, есть функция безопасной очистки памяти SecureZeroMemory. После того, как секретные данные побывали в памяти и более стали не нужны, их удаляют. Но обычный вызов ZeroMemory может быть при компиляции оптимизирован и выброшен полностью. В следующем примере компилятор при оптимизации выбросил бы вызов ZeroMemory из-за того, что переменная szPassword выходит из области видимости и далее не используется.
{
  WCHAR szPassword[MAX_PATH];

  // Retrieve the password
  if (GetPasswordFromUser(szPassword, MAX_PATH))    
  UsePassword(szPassword);
  // Clear the password from memory
  SecureZeroMemory(szPassword, sizeof(szPassword));
}

Еще можно усложнить захват картинки с экрана. Для этого в Windows 7 существует функция SetWindowDisplayAffinity. Достаточно добавить следующий код в вашу программу:
SetWindowDisplayAffinity(hwnd, WDA_MONITOR);
ShowWindow(hwnd, nShowCmd);
Теперь, если Desktop Window Manager не отключен, при попытке сделать скриншот злоумышленник увидит черные пикселы вместо окна программы.

Эти примитивные шаги всего лишь усложняют работу злоумышленника по вытаскиванию конфиденциальных данных, но, конечно, не решают проблему безопасности.