2008/10/25

2008년 10월 마이크로소프트 보안 공지 (비정기, 긴급)

서버 서비스의 취약점으로 인한 원격 코드 실행 문제(958644)

http://www.microsoft.com/technet/security/Bulletin/MS08-067.mspx
 에 나와 있듯이, 22일(현지) 에 긴급 발표된 내용입니다.

방화벽을 사용하는 환경에서는 크게 문제될 부분은 없으며, 방화벽을 운영한다면 135/445 등 관련 포트를 제한 하거나, 또는 서비스에서 Computer Browser 및 Server 서비스를 중지하면 됩니다.

최종적으론 패치를 적용하는것이 가장 적절한 대처 이겠습니다.^^

2008/10/23

C# TaskScheduler, 작업 스케쥴러

//Interop.TaskScheduler 는
//Vista 또는 Windows Server 2008 의 예약작업 COM 개체를 참조해야 함.
//TaskScheduler 1.1 Type Library, taskschd.dll

TaskScheduler a = new TaskScheduler();
a.Connect(null, null, null, null);

StreamReader sr = new StreamReader("c:\\테스트작업.xml");
string aa = sr.ReadToEnd();
sr.Close();

ITaskDefinition task = a.NewTask(0);
task.XmlText = aa;

ITaskFolder root = a.GetFolder("\\");

bool folderExist = false;
foreach(ITaskFolder f in root.GetFolders(0))
{
 if (f.Name == "Wssplex")
 {
  folderExist = true;
 }
 }
if (!folderExist)
{
 root.CreateFolder("Wssplex", null);
 root = a.GetFolder(\\Wssplex);
}

IRegisteredTask regTask = root.RegisterTaskDefinition("작업이름", task, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_S4U, null);

위의 예제 코드는 Wssplex 라는 폴더에, 테스트 작업 이라는 이름의 작업을 등록하는 것이며, 작업 설정 사항은 테스트작업.xml 에 있는 내용을 등록하는 것.

물론,. 예제에서는 xml 파일을 읽어서 넣었는데, task.XmlText  에 그냥  xml 내용을 하드 코딩을 해줘도 상관없음.

xml 의 트리구조는 작업 스케쥴러 UI 에서 특정 작업을 내보내기 하거나, C:\Windows\System32\Tasks 폴더의 작업 파일이 xml 이므로 텍스트 편집기에서 열어 보면 구조를 알수 있음.

또는, C:\>schtasks /query /tn 작업이름 /xml 처럼 하면 해당 작업에 대한 xml 을 볼수가 있음.

다음과 같이 각 항목을 코드상으로 구현도 가능

//생성
ITaskDefinition task = a.NewTask(0);
task.RegistrationInfo.Author = "Administrator";
task.RegistrationInfo.Description = "테스트";      

//Principals
task.Principal.UserId = Administrator"; ;
task.Principal.LogonType = _TASK_LOGON_TYPE.TASK_LOGON_S4U;

//트리거        
IEventTrigger trigger = (IEventTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_EVENT);
trigger.Enabled = true;
trigger.Subscription = "<QueryList><Query Id=\"0\" Path=\"System\"><Select Path=\"System\">*[System[Provider[@Name='aaaaa'] and (Level=1 ) and (EventID=5847)]]</Select></Query></QueryList>";

//Actions
IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);
action.Path = "C:\\Windows\\notepad.exe";
action.Arguments = "aaa";

//작업등록
ITaskFolder root = a.GetFolder("\\");
IRegisteredTask regTask = root.RegisterTaskDefinition("sss", task, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, null);

위의 예제는, 특정 이벤트 로그에 대한 이벤트 트리거를 등록하는 것.

그외, 상세한 내용은 http://msdn.microsoft.com/en-us/library/aa383607(VS.85).aspx 참조하면 되며, 그냥 명령행으로는 schtasks.exe 에서 대부분의 작업이 가능

2008/10/22

C# NetFwTypeLib, 고급 보안이 설정된 Windows 방화벽

//Interop.NetFwTypeLib 는 FwPolicy2 가 구현된 COM개체를 참조하고 있어야 함
//--> Vista & Windows Server 2008


Type trule = Type.GetTypeFromProgID("HNetCfg.FWRule");     
Type tpol = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");   

INetFwRule newRule;
INetFwPolicy2 Policy2 = (INetFwPolicy2)Activator.CreateInstance(tpol);

//v2.0|Action=Allow|Active=TRUE|Dir=Out|Protocol=6|RPort=8530|Name=윈도우 업데이트 서버(TCP-Out)|Edge=FALSE|

newRule = (INetFwRule)Activator.CreateInstance(trule);
newRule.Name = "윈도우 업데이트 서버(TCP-Out)";
newRule.Protocol = 6;
newRule.RemotePorts = "8530";
newRule.Enabled = true;
newRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_OUT;
newRule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;
Policy2.Rules.Add(newRule);

그외, 방법으로는 netsh 명령행을 이용하거나 Vbscript 를 이용

netsh advfirewall firewall>add rule name="윈도우 업데이트 서버(TCP-Out)" dir=out action=allow enable=yes remoteport=8530 protocol=tcp


참고로,, 방화벽의 Outbound 차단에 대한 이해에 도움이 될만한,..
테크넷 매거진 내용

보안: Windows Vista 방화벽 관리
http://technet.microsoft.com/ko-kr/magazine/cc510323.aspx (캐시된문서)

의 내용중 마지막 단락의 "아웃바운드 필터링으로 가능한 보안 수준" 은 한번쯤 생각해 볼만한 부분인듯..^^

가장 많이 본 글