Введение

Добро пожаловать в мою новую статью сегодня, я покажу вам, как можно сбросить уровень пользователя, выполняющего процесс с помощью C++.

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



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

Одним из инструментов, который может использовать злоумышленник, является диспетчер задач Windows, который отображает список запущенных процессов и связанных с ними пользователей или групп. Изучая пользователя или группу, связанную с процессом, злоумышленник может определить, запущен ли процесс с повышенными привилегиями, такими как «СИСТЕМА» или «Администратор».

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

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

Код

#include <windows.h>
#include <iostream>
#include <conio.h>

using namespace std;
int main() {
  HANDLE processHandle;
  DWORD processId;
  TOKEN_ELEVATION_TYPE elevationType;
  DWORD size;
  // Get the ID of the process we want to analyze
  processId = GetCurrentProcessId();
  // Open a handle to the process
  processHandle = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, processId);
  if (processHandle) {
    bool opentokenresult;
    bool getokeninforesult;
    HANDLE tokenHandle;
    opentokenresult = OpenProcessToken(processHandle, TOKEN_QUERY, &tokenHandle);
    // Get a security token associated with the process
    if (opentokenresult) {
      // Get the elevation type of the token
      getokeninforesult = GetTokenInformation(tokenHandle, TokenElevationType, &elevationType, sizeof(elevationType), &size);
      if (getokeninforesult) {
        cout<<elevationType;
        switch (elevationType) {
          case TokenElevationTypeDefault:
            // USER
            return 1;
            break;
          case TokenElevationTypeFull:
            // ADMIN
            return 2;
            break;
          case TokenElevationTypeLimited:
            // USER WITH SOME ADDITIONAL PERMISSION
            return 3;
            break;
          default:
            cerr << "Error getting process user permissions." << endl;
            return 12;
            break;
        }
      }
      CloseHandle(tokenHandle);
    }
    else {
      cerr << "Error obtaining security token for the process." << endl;
      return 12;
    }
    CloseHandle(processHandle);
  }
  else {
    cerr << "Error opening a handle to the process." << endl;
    return 12;
  }
}

Этот код написан на C++ и определяет уровень пользовательских разрешений процесса Windows. Для этого он сначала получает идентификатор текущего процесса, а затем открывает дескриптор этого процесса с помощью функции OpenProcess из Windows API.

После получения дескриптора процесса код пытается получить маркер безопасности, связанный с процессом, с помощью функции OpenProcessToken. В случае успеха он затем получает тип прав доступа токена с помощью функции GetTokenInformation и сохраняет его в переменной elevationType.

Наконец, код использует оператор switch для определения уровня разрешений пользователя на основе значения elevationType и возвращает соответствующее целочисленное значение, указывающее права пользователя. Если на каком-либо этапе возникает ошибка, код выводит соответствующее сообщение об ошибке, используя либо cout, либо cerr, и возвращает значение 12.

Обратите внимание, что TOKEN_ELEVATION_TYPE — это перечисление в Windows API, определяющее уровень прав токена безопасности. Возможные значения этого перечисления:

  • TokenElevationTypeDefault (0): Пользователь
  • TokenElevationTypeFull (1): Администратор
  • TokenElevationTypeLimited (2): Пользователь с некоторыми дополнительными разрешениями.

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

Обнаружение

Давайте загрузим это на antiscan.me.



Выводы

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

Если вам нравится мой контент и вы хотите помочь мне вывести этот проект на новый уровень, вы можете стать участником, пожертвовав ежемесячную подписку. Ваша поддержка поможет мне продолжать создавать качественный контент. Благодарим вас за щедрость!



Если в настоящее время для вас нет возможности сделать пожертвование, не проблема! Я очень ценю вашу поддержку в распространении моего проекта и распространении информации. Несмотря на это, я продолжу создавать и делиться своими работами, и я благодарен за вашу поддержку и интерес.

Если вы хотите поддержать меня, вы можете проверить мой дополнительный профиль на Medium и просмотреть все статьи! Следуйте и поддержите его!. Это ссылка:



Это YouTube-канал моей команды разработчиков вредоносного ПО, нам нужна ваша подписка и ваша поддержка.



Спасибо, что прочитали это :)

S12.