본문 바로가기

일기장/악성코드

악성코드 공격 -1 (윈도우 방화벽 설정)

728x90

처음 당했던 공격은 상당히 단순했지만 3개의 공격 방식을 동시에 당했고
전혀 준비되어있지 않던 상황이라 어떻게 배포되었는지 파악할 수 없었고 증상 확인과 해결만 하였습니다


1. 증상

 - exe 프로그램 실행 안됨(일부 PC는 Windows Defender에서 에러 표시), DLL파일은 로드 가능하나 특정 통신 불가로 정상적인 동작 못함

 

2. 원인&공격 방식 분석

단순히 앤드 유저의 PC에서 사용될 exe파일이나 특정 통신 포트를 차단하는 공격 방식

1111, 80은 예시

위 사진과 같이 인바운드, 아웃바운드 규칙에 특정 프로그램을 아예 사용하지 못하게 하거나
특정 프로그램(exe or dll) 등에서 사용하는 통신 포트를 차단 규칙으로 넣음

 

3. 해결방법

 - 증상 해결을 위한 별도의 exe파일을 제작하여 고객사에 배포하여 모든 동작 전 우선 실행되도록 요청
 - 해결 프로그램
    1) 작성자는 델파이가 가장 친숙한 언어이기에 델파이로 만들었으며 Jedi Project 내에 NetFwTypeLib_TLB를 사용하면 방화벽을 컨트롤 가능하다 (그 외에도 언어마다 방법은 많겠지만)
    2) 방화벽 규칙을 전체 탐색하며 규칙에 들어간 파일명과 포트를 탐색하여 해당 규칙 이름 변경 후(혹시나 동일한 이름의 정상적인 방화벽 규칙과 중복되어 함께 삭제될 수 있으므로) 제거    

uses
	NetFwTypeLib_TLB;

procedure Firewall;
const
  NewName = 'Delete Rule';   //삭제시 엉뚱한 방화벽 규칙 삭제를 막기위해서 임시 변경용
var
  fwPolicy2: INetFwPolicy2;
  RulesObject: INetFwRules;
  RulesEnum: IEnumVariant;
  LRule: OleVariant;
  longVal: LongWord;
begin
  CoInitialize(nil);
  try
    fwPolicy2   := CreateOleObject('HNetCfg.FwPolicy2') as INetFwPolicy2;
    RulesObject := fwPolicy2.Rules;

    RulesEnum := IUnknown(RulesObject._NewEnum) as IEnumVARIANT;

    while RulesEnum.Next(1, LRule, longVal) = 0 do
    begin
      if LRule.Action = NET_FW_ACTION_BLOCK then
      begin
        if Pos('abce.exe', LRule.ApplicationName) > 0 then  //파일명으로 확인
        begin
          LRule.Name := NewName;                            //이름변경 후 
          RulesObject.Remove(NewName);                      //제거
        end
        else if Pos('1111', LRule.RemotePorts) > 0 then     // 포트로 확인
        begin
          LRule.Name := NewName;
          RulesObject.Remove(NewName);
        end
        else if Pos('80', LRule.RemotePorts) > 0 then
        begin
          LRule.name := NewName;
          RulesObject.Remove(NewName);
        end
      end;
    end;

    LRule := Unassigned;
  finally
    CoUninitialize;
  end;
end;

728x90