Windows는  Telnet 이나 터미널서비스가 동작중이지 않은 이상 공격대상 PC의 관리자 ID/Password를 안다고 해도 악성코드가 원격에서 명령을 실행시킬 방법이 마땅치 않습니다. 대상 PC에 Telnet 이 동작중일 가능성은 거의 없고, 혹시 터미널서비스가 동작중이더라도 프로그램적으로 이용하기는 약간 거시기하죠. 공유폴더를 통해 악성코드를 공격대상 PC에 복사할 수 있다고 하더라도 실행시킬 방법이 없으면 소용 없는 일입니다.

Windows에서 원격PC의 단순암호계정 취약점을 이용해 명령을 실행시킬 수 있는 방법이 있는데... 바로 "Task Scheduler Service"입니다. 우리말로는 "예약된 작업"이죠. 디폴트로 동작되는 이 서비스를 이용해서, 대상 PC의 계정/암호만 안다면 이 작업 예약이란 걸 (엉뚱하게도) 원격에서 할 수 있습니다. (자세한 내용은 커맨드 창에서 "at" 명령어 도움말을 참조하세요.)

그래서 이 원격 예약작업은 PC주인보다 악성코드에 의해 애용되는 대표적인 서비스입니다. 반대로 이 원격 예약작업 등록 패킷을 차단할 수 있다면 악성코드 확산을 차단하는데도 효과가 있겠죠.

원격 작업 예약을 요청하는 패킷은 특정한 타입의 SMB 패킷입니다.

445/TCP Port를 이용하는 SMB 패킷에 대해 SMB 헤더를 분석합니다.
SMB Header 는 다음과 같이 생겼습니다.

SMB_Header { UCHAR Protocol[4]; UCHAR Command; SMB_ERROR Status; UCHAR Flags; USHORT Flags2; USHORT PIDHigh; UCHAR SecurityFeatures[8]; USHORT Reserved; USHORT TID; USHORT PIDLow; USHORT UID; USHORT MID; }


상기 구조체 중 Command 항목이 "NT Create AndX (0xa2)" 인 경우 바로 뒤에 따라오는 SMB Command 확장 Command 구조체는 다음과 같이 생긴 놈이 됩니다.

SMB_Parameters

{
  UCHAR WordCount;
  Words
  {
    UCHAR AndXCommand;
    UCHAR AndXReserved;
    USHORT AndXOffset;
    UCHAR Reserved;
    USHORT NameLength;
    ULONG Flags;
    ULONG RootDirectoryFID;
    ULONG DesiredAccess;
    LARGE_INTEGER AllocationSize;
    SMB_EXT_FILE_ATTR ExtFileAttributes;
    ULONG ShareAccess;
    ULONG CreateDisposition;
    ULONG CreateOptions;
    ULONG ImpersonationLevel;
    UCHAR SecurityFlags;
  }
}
 
SMB_Data
{
  USHORT ByteCount;
  Bytes
  {
    SMB_STRING FileName;
  }
}

이 중 두번째 구조체인 SMB_Data에 들어있는 WCHAR String의 내용이 "\atsvc"이면 이것이 원격작업 등록을 요청하는 패킷입니다. (실제 등록하고자 하는 작업의 내용은 별도의 패킷을 전송됩니다.)
 

Posted by kuaaan
,


사랑합니다. 편안히 잠드소서