Google Authenticator를 이용하여 SSH 접속하는 방법에 대해 알아보겠습니다.


많은 서비스들이 이중인증방식(Two-Factor Authentication)으로 OTP를 사용하고 있습니다.

OTP 방식 중에는 시간동기화 방식(TOTP), 이벤트 방식(HOTP), 질의/응답방식이 있으며 그 중에 시간 동기화 방식과 이벤트 방식의 차이점은 아래 표를 참고 하시면 됩니다.


구분 

 내용

 시간동기화 방식

 Time-based One-Time Password (TOTP)

 - 일정시간에 따라 지속적으로 암호값이 변함 (기본 30초)

 - 시간동기화 방식 알고리즘으로 HMAC-SHA1은 HOTP와 같은 방법으로 암호 생성

 - 비밀키와 현재 유닉스 시간을 결합하여 암호 생성 (HOTP(K, TC))

 이벤트 방식

 HMAC-based One-Time Password (HOTP)
 (Hash Message Authentication Code)

 - 이벤트가 발생 시 암호값 생성

 - 이벤트 기반 알고리즘으로 HMAC-SHA1를 이용하여 암호 생성

 - 비밀키와 카운터 값을 결합하여 암호 생성 (HOTP(K, C))


TOTP방식은 암호가 주기적으로 변경되고 짧은 시간동안만 유효하기 때문에 HOTP보다 안전한 방식으로 알려져 있습니다.


Google Authenticator는 위 두가지 방식을 모두 지원하고 있으며, 사용자 서비스에 맞게 원하는 방식으로 구현이 가능합니다.

더 자세한 내용을 원하시면 아래 위키를 참조하시면 됩니다.

https://en.wikipedia.org/wiki/Google_Authenticator


그럼 Google Authenticator 설치를 진행 해 보겠습니다.



** Google Authenticator 설치 과정 **


1. 패키지 설치 (설치확인 후 설치 되지 않은 패키지만 설치)

 # yum -y install git pam-devel autoconf automake libtool gcc 


git : 형상관리 도구로 github에 있는 google authenticator 소스를 복사하기 위한 툴

pam : Google 인증을 사용하기 위한 인증 모듈

Autoconf/automake/libtool : 소스코드 빌드를 위한 툴

gcc : 컴파일러



2. Google Authenticator PAM module 다운로드

 # git clone https://github.com/google/google-authenticator-libpam



3. Build & Install

 # cd google-authenticator-libpam/

 # ./bootstrap.sh

 # ./configure --libdir=/lib64  <-- 64비트일 경우 추가

 # make && make install


※ 리눅스 Bit 확인

# getconf LONG_BIT


위 과정을 완료하시면 /usr/lib64/security 디렉토리 안에 pam_google_authenticator.so 모듈이 설치됩니다.



4. PAM Config 설정

PAM 설정에서 auth required pam_google_authenticator.so nullok 부분을 추가하시면 됩니다.

authenticator.so 뒷 부분은 옵션을 설정하는 부분으로 여러가지 옵션을 사용할 수 있으며,

nullok 옵션은 OTP를 설정하지 않은 User는 OTP인증 없이 로그인 할 수 있도록 하는 옵션입니다.

즉, 모든 User에게 OTP를 적용하려면 nullok 옵션을 빼시면 됩니다.

** OTP 해제하는 방법은 기존 설정은 그대로 두고 해당 부분만 주석 처리한 후 SSH를 재시작 해주시면 기존대로 OTP없이 접속 가능합니다.

 # vi /etc/pam.d/sshd



5. SSH Config 설정

sshd_config 에서 아래 부분에 대하여 사용하도록 설정을 변경합니다.

ChallengeResponseAutientication을 제외하곤 기본값으로 yes로 되어 있을 겁니다.

설정이 완료되면 저장 후 ssh 서비스를 재시작 합니다.

 # vi /etc/ssh/sshd_config

 PasswordAuthentication yes
 ChallengeResponseAuthentication yes
 UsePAM yes

 # service sshd restart



6. 계정 TOTP 설정

아래 파란색 질문에 대하여 Y로 진행하시면 되고, 붉은색의 URL과 Secret Key는 비밀키를 전달하는 데 사용 됩니다.

URL의 경우 QR코드를 통하여 자동 등록하는 방법이며, Secret Key는 직접 수동으로 입력하는 방법이라 둘 중 한 가지 방식으로 선택하여 진행하시면 됩니다. 아래에서는 두 가지 방법에 대하여 설명 드리겠습니다.

 # google-authenticator 

Do you want authentication tokens to be time-based (y/n) y
Warning: pasting the following URL into your browser exposes the OTP secret to Google:
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/root@localhost%3Fsecret%3D5VNTBITJHEH2GGSVOLTFZMDAKA%26issuer%3Dlocalhost
Failed to use libqrencode to show QR code visually for scanning.
Consider typing the OTP secret into your app manually.
Your new secret key is: 5VNTBITJHEH2GGSVOLTFZMDAKA
Your verification code is 024646
Your emergency scratch codes are:
  60700042
  28183432
  27147472
  84160543
  62329722

Do you want me to update your "/root/.google_authenticator" file? (y/n) y

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

By default, a new token is generated every 30 seconds by the mobile app.
In order to compensate for possible time-skew between the client and the server,
we allow an extra token before and after the current time. This allows for a
time skew of up to 30 seconds between authentication server and client. If you
experience problems with poor time synchronization, you can increase the window
from its default size of 3 permitted codes (one previous code, the current
code, the next code) to 17 permitted codes (the 8 previous codes, the current
code, and the 8 next codes). This will permit for a time skew of up to 4 minutes
between client and server.
Do you want to do so? (y/n) y

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting? (y/n) y


여기까지 오셨으면, 서버 작업은 완료되었습니다.

실제 OTP를 사용하기 위해서는 사용자 휴대폰에 Google OTP 앱을 설치하여 진행하여야 합니다.



7. Google OTP 설치 및 등록

Google OTP 추가 방법에는 위에서 말씀 드린 것 처럼 바코드 스캔과 키 입력을 통한 방법이 있으며,

먼저 바코드 스캔을 통한 OTP 등록을 먼저 진행 해 보겠습니다.

아래 순서대로 따라 오시면 됩니다.


①                                                                                                  ②


③                                                                                                 ④





 ** 키 입력을 통한 수동 등록

①                                                                                                  ②




여기까지 Google Authenticator의 설정이 끝났으며, 이제 SSH 접속 시 OTP를 이용하여 접속이 가능합니다.

아래는 PuTTY와 SecureCRT를 이용한 접속 화면이며, SecureCRT의 경우 OTP를 이용하기 위하여 옵션 수정이 필요합니다.


** PuTTY


** SecureCRT





** SecureCRT 옵션 설정 방법

1. Session Options > SSH2 > Keyboard Interactive 순서 변경


2. Keyboard Interactive > Properties > Store password 체크 해제











가상머신 네트워크 구성의 이해라는 주제로 포스팅을 해볼까 합니다.


특정 프로그램에 대하여 국한되어 있지 않고

가상머신 네트워크에 대한 기본적인 개념만 가지고 있으면,

어떤 가상머신에서도 충분히 구성 하실 수 있으시리라 봅니다.


일반적으로 가상머신에서 지원하는 방식은 크게 3가지로 구분할 수 있습니다.


1. 브리지(Bridge)

2. 호스트(Host-only)

3. NAT


브리지와 호스트는 가상머신에서 제공하는 네트워크 스위치라고 생각하시면 되고,

NAT는 방화벽이나 가정에서 사용하는 인터넷 공유기라고 생각하시는게 이해하기가 쉽습니다.


각 방식의 차이점은 아래와 같습니다.


                                                    - 브리지 : 인터넷 가능, 사용자 네트워크와 동일 대역

                                                    - 호스트 : 인터넷 불가능(폐쇄망), 사용자 네트워크와 다른 대역

                                                    - NAT    : 인터넷 가능, 사용자 네트워크와 다른 대역



하지만, 호스트와 NAT 구성의 조합으로 인터넷을 가능하게 할 수 있습니다.


아래 그림에서 가상머신의 NAT 기능은

내부 네트워크의 IP(사설IP)를 외부 네크워크 IP(공인IP)로 변경해 주어 인터넷을 가능하게 하는 기능입니다.




아래와 같이 호스트와 NAT 구성으로 간단한 네트워크를 구성할 수 있습니다.



위와 같이 방화벽 즉, NAT 구성하기 위한 서버에서는 호스트와 NAT 두 개의 네트워크 카드가 필요합니다.

호스트 대역에 있는 PC가 인터넷을 가능하게 하려면 방화벽에서 추가 설정이 필요합니다.

방화벽을 윈도우라고 가정하고 아래와 같이 설정을 하시면 됩니다.


NAT 네트워크의 속성으로 들어갑니다.


아래와 같이 [공유] 텝에서 첫번째 항목을 체크 후 확인을 클릭합니다.


위 설정을 완료하면 내부 네트워크의 PC에서 인터넷이 가능합니다.












리눅스에서 명령어 입력 시 로깅을 남기는 방법에 대하여 알아보도록 하겠습니다.

해커의 행위 분석이라던지 시스템 작업 시 원인 분석용으로 사용하기에도 아주 유용합니다.


function cmdlog
{
f_ip=`who am i | awk '{print $5}'`
cmd=`history | tail -1`
if [ "$cmd" != "$cmd_old" ]; then
  logger -p local1.notice "[1] From_IP=$f_ip, PWD=$PWD, Command=$cmd"
fi
  cmd_old=$cmd
}
trap cmdlog DEBUG



logger 명령어를 사용하면 임의로 로그를 생성할 수 있습니다.


ex)

# logger hahaha

# tail -1 /var/log/message

Jul 26 16:37:13 Host root: hahaha



syslog의 Log Level을 지정하기 위해서는 아래 그림의 Facility와 Severity Level에 대한 설정이 필요합니다.

Facility는 프로그램의 형식이며, Severity Level은 로깅에 대한 심각성 정도(레벨)라고 생각하시면 됩니다.

더 자세한 사항은 아래 링크를 참조하시기 바랍니다.

https://en.wikipedia.org/wiki/Syslog

Facility

[그림출처] https://en.wikipedia.org/wiki/Syslog

Severity level

[그림출처] https://en.wikipedia.org/wiki/Syslog



ex)

# logger -p local1.notice logging test

# tail -1 /var/log/message

Jul 26 17:00:46 Host root: logging test


기본적으로 logger를 사용하면 /var/log/message 에 로깅이 되는데 다른 파일에 로깅을 하길 원하면 /etc/rsyslog.conf에 새로운 위치를 추가 해주시면 됩니다.



/var/log/cmdlog에 설정 후 messages에 로깅 되지 않도록 local1.none 설정을 해 줍니다.


해당 쉘 스크립트를 Global하게 적용하기 위해서 /etc/profile.d/에 작성한 스크립트를 넣어 둡니다.


마지막으로 설정을 적용하기 위해 데몬을 재시작 합니다.


#/etc/init.d/rsyslog restart














오픈소스 기반의 시스템 모니터링 툴인 xymon 툴 설치에 대하여 알아보겠습니다.

xymon을 설치하기 위해서 기본적으로 설치해야 할 툴, 라이브러리등이 있으며

어떤한 것들이 필요한지 살펴 보겠습니다.


- RRDTOOL : (Round Robin Database tool) 데이터를 그래프화 하여 보여주는 툴

- FPING : ping의 확장판

- PCRE : (Perl Compatible Regular Expressions) 정규표현식을 지원하는 라이브러리

- OpenSSL : 통신 암호화 기능

- OpenLdap : 네트워크상에서 디렉터리 서비스를 조회하고 수정하는 프로토콜

- Apache : 웹 서비스 툴


이외에 위의 라이브러리들을 설치하기 위하여 추가로 설치 하여야 할 라이브러리들도 있지만

부가적으로 설치되는 부분들이라 생략하겠습니다.



 

  설치


1. 컴파일 도구


  # yum -y install gcc gcc-c++



2. RRDTOOL


 # wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
 # rpm -Uvh rpmforge-release-0.5.2-2.el5.rf.i386.rpm
 # yum -y install rrdtool-devel



3. FPING


 # wget http://fping.org/dist/fping-3.4.tar.gz
 # tar zxvf fping-3.4.tar.gz
 # cd fping-3.4
 # ./configure
 # make;make install



4. Xymon Lib


 # yum -y  install pcre-devel
 # yum -y  install openssl-devel
 # yum -y  install openldap-devel
 # yum -y install httpd



5. 사용자 추가


 # useradd xymon
 # passwd xymon



6. Xymon Server


 # wget http://iweb.dl.sourceforge.net/project/xymon/Xymon/4.3.10/xymon-4.3.10.tar.gz
 # tar zxvf xymon-4.3.10.tar.gz
 # cd xymon-4.3.10
 # ./configure.server (설정 시 하기 내용 참고)
 # make; make install


 # chmod go+rx /home/xymon


Configuration script for Xymon

This script asks a few questions and builds a Makefile to compile Xymon

Checking your make-utility
Checking pre-requisites for building Xymon

Checking for fping ...
Xymon has a built-in ping utility (xymonping)
However, it is not yet fully stable and therefore it
may be best to use the external fping utility instead.
I found fping in /usr/local/sbin/fping
Do you want to use it [Y/n] ?
y
Checking to see if '/usr/local/sbin/fping 127.0.0.1' works ...
127.0.0.1 is alive
OK, will use '/usr/local/sbin/fping' for ping tests
NOTE: If you are using an suid-root wrapper, make sure the 'xymond'
      user is also allowed to run fping without having to enter passwords.
      For 'sudo', add something like this to your 'sudoers' file:
      xymon ALL=(ALL) NOPASSWD: /usr/local/sbin/fping



Checking for PCRE ...
Compiling with PCRE library works OK
Linking with PCRE library works OK


Checking for RRDtool ...
Not RRDtool 1.0.x, checking for 1.2.x
Compiling with RRDtool works OK
Linking with RRDtool works OK


Checking for OpenSSL ...
Compiling with SSL library works OK
Linking with SSL library works OK
Checking if your SSL library has SSLv2 enabled
Will support SSLv2 when testing SSL-enabled network services

Xymon can use the OpenSSL library to test SSL-enabled services
like https-encrypted websites, POP3S, IMAPS, NNTPS and TELNETS.
If you have the OpenSSL library installed, I recommend that you enable this.

Do you want to be able to test SSL-enabled services (y) ?
y



Checking for LDAP ...
Compiling with LDAP works OK
LBER library not needed
Linking with LDAP works OK

Xymon can use your OpenLDAP LDAP client library to test LDAP servers.

Do you want to be able to test LDAP servers (y) ?
y

Checking for clock_gettime() requiring librt ...
clock_gettime() requires librt


Checking for Large File Support ...
Large File Support OK


Setting up for a Xymon server

What userid will be running Xymon [xymon] ? [enter]

Found passwd entry for user xymon:x:500:500::/home/xymon:/bin/bash

Where do you want the Xymon installation [/home/xymon] ? [enter]

OK, will configure to use /home/xymon as the Xymon toplevel directory

What URL will you use for the Xymon webpages [/xymon] ? [enter]

Where to put the Xymon CGI scripts [/home/xymon/cgi-bin] ? [enter]
(Note: This is the filesystem directory - we will get to the URL shortly)

What is the URL for the Xymon CGI directory [/xymon-cgi] ? [enter]
(Note: This is the URL - NOT the filesystem directory)

********************** SECURITY NOTICE ****************************
If your Xymon server is accessible by outsiders, then you should
restrict access to the CGI scripts that handle enable/disable of
hosts, and acknowledging of alerts. The easiest way to do this is
to put these in a separate CGI directory and require a password to
access them.
Even if your Xymon server is on a secured, internal network, you
may want to have some operations (like disabling a host) be password-
protected - that lets you see who disabled or acknowledged an alert.

Where to put the Xymon Administration CGI scripts [/home/xymon/cgi-secure] ? [enter]
(Note: This is the filesystem directory - we will get to the URL shortly)



What is the URL for the Xymon Administration CGI directory [/xymon-seccgi] ? [enter]
(Note: This is the URL - NOT the filesystem directory)



** Note that you may need to modify your webserver configuration.
** After installing, see /home/xymon/server/etc/xymon-apache.conf for an example configuration.


To generate Xymon availability reports, your webserver
must have write-access to a directory below the Xymon
top-level directory. I can set this up if you tell me
what group-ID your webserver runs with. This is typically
'nobody' or 'apache' or 'www-data'

What group-ID does your webserver use [nobody] ?
apache


Where to put the Xymon logfiles [/var/log/xymon] ? [enter]


What is the name of this host [localhost.localdomain] ? [enter]


What is the IP-address of this host [127.0.0.1] ? [enter]

** NOTE: Using 127.0.0.1 (loopback), but it is probably not what you want **

Where should I install the Xymon man-pages (/usr/local/man) ? [enter]





Using Linux Makefile settings



Created Makefile with the necessary information to build Xymon
Some defaults are used, so do look at the Makefile before continuing.

Configuration complete - now run make (GNU make) to build the tools



7. Apache 구성


 # vi /etc/httpd/conf/httpd.conf
 DocumentRoot /home/xymon/server/www 로 변경

 # ln -s /home/xymon/server/etc/xymon-apache.conf xymon-apache.conf

 # htpasswd -c /home/xymon/server/etc/xymonpasswd admin

 # /etc/init.d/httpd start



8. xymon 서비스 등록


 # cd /etc/init.d
 # wget http://iam8up.com/xymon-initd/xymon
 # chmod 755 xymon
 # ln -s /etc/init.d/xymon /etc/rc3.d/S70xymon
 # /etc/init.d/xymon start



여기까지 오셨으면 xymon 설치가 정상적으로 완료 되었습니다.

이제 브라우저를 통해서 접속이 가능합니다.




xymon 데몬이 html 파일을 주기적으로 자동 생성 되기 때문에 html 파일의 내용을 직접 수정할 수는 없습니다.

상단의 이름을 변경하고자 하실 때에는 cfg 파일을 수정 해야합니다.



9. xymon cfg 파일 변경 list


 # vi /home/xymon/server/etc/xymonserver.cfg -> 상단의 이름 변경

 # vi /home/xymon/server/etc/hosts.cfg -> 클라이언트 등록




10. Client Files DownLoad


 :: Windows

BBWin_0.13.msi


 :: Linux (xymon 설치 파일에 클라이언트가 있습니다.)

 # wget http://iweb.dl.sourceforge.net/project/xymon/Xymon/4.3.10/xymon-4.3.10.tar.gz








레지스트리의  image file execution options 키에 대하여 알아보겠습니다.


윈도우 응용프로그램이 실행되는 과정이 사용자들은 실제 응용프로그램을 실행한다고 생각하지만

실행 전 레지스트리의 [HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image file execution options]

키를 확인하고 하위키 값에 실행하려는 이미지가 존재하면 Debugger 값을 참조하여 해당 값에 연결되어 있는 이미지를

먼저 실행하게 됩니다.

이는 프로세스를 실행 시키는 CreateProcess가 image file execution options를 먼저 참조하기 때문입니다.


디버깅을 위한 기능이지만 이를 악용하여 악성코드가 작동하도록 이용되기도 합니다.


예를 들면 sethc.exe 는 고정키 기능을 위한 응용프로그램으로 shift키를 연속 5번 누르면 실행이 됩니다.

이것을 악용하여 image file execution options 값에 sethc.exe 하위키를 생성하고 Debugger 값을 cmd.exe로 설정하게

되면 사용자는 sethc.exe를 실행시키지만 실제로는 cmd.exe가 실행되게 됩니다.




sethc.exe는 잠긴화면에서도 실행이 되기 때문에 이를 악용하여 사용자 추가 후 서버에 접속이 가능합니다.






백업은 아무리 강조 해도 지나치지 않습니다.

오늘은 윈도우 기본 내장 프로그램인 Robocopy를 이용하여 백업을 하는 방법에 대하여 알아보겠습니다.

참고로 XP는 별도로 설치 하여야 합니다.


robocopy /? 를 입력하면 많은 옵션들이 있는데 사용자들 환경에 맞게 쓰시면 됩니다.


제게 백업 시 필요한 사항은..

1. 디렉터리 단위로 복사가능 (하위디렉터리 포함)

2. 최초 백업 후 변경 된 파일만 백업

3. 원본 파일의 타임스탬프 보존 (백업일자 확인하기 위해)

4. 백업 완료 시 로그가 생성 되어야 한다.


뭐 이정도가 되겠네요..



기본적인 robocopy 명령어는 다음과 같습니다.

>robocopy [원본] [대상]


- 옵션

/E : 비어 있는 디렉토리를 포함하여 하위 디렉터리를 복사합니다.

/DCOPY:T : 디렉터리 타임 스탬스를 복사합니다.

/XO : 오래 된 파일은 제외합니다.

/NFL : 파일 목록 없음 - 파일 이름을 기록하지 않습니다.

/NDL : 디렉터리 목록 없음 - 디렉터리 이름을 기록하지 않습니다.

/LOG:[파일명]

/R:1 : 실패한 복사본에 대한 다시 시도 횟수입니다. (기본이 백만번인데 굳이 안되는걸 백만번 할 필요는 없겠죠)

/W:1 : 다시 시도 시 대기 시간입니다. (기본은 30초입니다.)



- 굳이 추가하지 않아도 기본값으로 들어있는 옵션

/COPY:DAT : 파일에 대해 복사할 내용입니다.



제가 사용하는 옵션이고 추가적으로 많이 사용하는 옵션입니다.

/MIR : 원본 데이터와 동기화를 하는 옵션이기 때문에 백업 폴더에 다른 파일이 존재하면 삭제가 됩니다.

/LOG+:[파일명] : 기존 로그를 덮어쓰지 않고 추가하는 옵션입니다.


ex)

robocopy \\share\data$ D:\Backup /E /DCOPY:T /R:1 /W:1 /NFL /NDL /LOG:D:\Logs\Backup_%date%.log


※ 저는 로그파일에 %date%를 출력하도록 하여 /LOG+: 옵션을 사용하지 않고 /LOG: 옵션을 사용하였습니다.



주기적으로 사용하시려면 배치 파일을 만들어서 작업스케줄에 등록하여 쓰시면 됩니다.









항상 보안 사고는 해커가 다 뒤적거리고 나온 뒤에 알게 되거나 혹은 모르고 지나는 경우가 대부분일 겁니다.

또한 해킹사고 후 가장 중요한 것은 침입 시간입니다. 시간을 알 수 있으면 역추적이나 분석에 많은 도움이 되기 때문에

굉장히 중요한 단서입니다.


윈도우 로그인 시 배치 파일을 이용하여 메일 발송하는 것을 해보고자 합니다.


> 준비물

 

- 메모장
- Netcat (NC)

- SMTP 서버


SMTP 서버는 설치 되어 있다는 전제하에 설명 드리겠습니다.

Netcat은 줄여서 NC 라고 많이 쓰고 있는데 간단히 설명 드리면 네트워크를 연결을 통한 작업을 할 수 있도록 제작 된 프로그램입니다.


시나리오는

1. SMTP를 이용한 메일 발송이 가능 하도록 필요한 정보를 텍스트 파일에 저장.

2. 그 정보를 NC 프로그램을 통해서 SMTP 서버에 접속하여 메일을 발송.




배치파일 스크립트입니다.

 

@echo off

title C:\Windows\system32\cmd.exe

※ title을 넣은 이유는 cmd창이 실행되었을 경우를 대비하여 눈속임을 하기 위함입니다.



rem Create mail contents 
echo helo naver.com>> "%userprofile%\alert.txt"
echo mail from:^<Mail@Address^>>> "%userprofile%\alert.txt"
echo rcpt to:^<Mail@Address^>>> "%userprofile%\alert.txt"
echo data>> "%userprofile%\alert.txt"
echo Subject:【-ALERT-】 Server LOGIN detected - [ %COMPUTERNAME% ]>> "%userprofile%\alert.txt"
echo Login by [ %USERNAME% ] on [ %Date% %TIME% ] to Server [ %COMPUTERNAME% ]>> "%userprofile%\alert.txt"
echo .>> "%userprofile%\alert.txt"


위 부분이 메일 내용을 만드는 부분입니다. 일반 SMTP 명령어를 사용하여 메일을 보내도록 하기 위해

내용을 텍스트로 저장합니다. 여기서 중요한 점은 끝에 공백이 들어가면 오류가 나기 때문에 조심하셔야 합니다.



rem Connect smtp server and execute the script file
pushd \\ShareServer\share\nc
nc -w 2 -i 1 SMTP-Server 25 < "%userprofile%\alert.txt" > "%userprofile%\results.txt"
popd


※ 메일 발송 정보를 가지고 NC를 이용하여 SMTP 서버에 접속하여 메일을 보내는 부분입니다.

내용 중에 PUSHD/POPD 라는 명령어가 있는데 cmd를 통한 네트워크 드라이브를 잡아주는 역할을 합니다.

 

윈도우 cmd에서 UNC경로 사용하기 PUSHD/POPD



rem Delete create files
del /Q "%userprofile%\alert.txt"
del /Q "%userprofile%\results.txt"


※ 흔적을 없애기 위해 생성된 파일을 삭제합니다.




이제 배치파일을 다 만들었고 테스트도 다 끝나셨다면, 젤 중요한 로그인 할 때 배치파일이 실행 되도록 해야겠죠..


방법은 여러가지가 있을 겁니다.

1. 시작 프로그램에 등록

2. 레지스트리 시작에 등록

3. 그룹정책에 등록

4. 기타



등등 여러가지 방법을 통해서 등록을 할 수 있지만, 저는 winlogon 레지스트리에 등록하여 실행하도록 하였습니다.

(해커가 찾아서 삭제할 수 있을 거라는 가정하에.. 저 혼자 생각이지만..ㅡㅡ;)

윈도우 로그인을 할 때 winlogon 레지스트리가 실행이 됩니다.



Winlogon 레지스트리를 찾아보면, Userinit 라는 값이 있는데 이 부분에 추가를 해 놓으면 로그인 할 때 실행이 됩니다.

위치 : [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]





※ 덤으로 cmd 창 실행시 알림을 보내도록 설정 할 수도 있습니다. 위 메일 내용만 살짝 바꾸어 사용하시면 됩니다.

레지스트리에 아래 내용을 추가하시면 해커가 cmd창을 실행했을 때 메일을 받아 볼 수 있습니다.


[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"AutoRun"="C:\\Windows\\System32\\\alert_cmd.bat"



▶ 참고로 기존 세션이 연결 되어 있으면 로그인 시에는 동작하지 않습니다.









윈도우 cmd 에서 UNC 경로를 사용할 수 있도록 해주는 명령어인 PUSHD/POPD에 대하여 알아보겠습니다.



쉽게 말해 네트워크 드라이브를 명령어로 연결하는거라 생각하시면 됩니다.

일반적으로 cmd에서 UNC 경로로 이동시 아래 이미지와 같이 지원하지 않는다는 에러 메시지가 나옵니다.






- PUSHD [UNC 경로]


예로 >PUSHD \\server\share 라고 입력하면 사용중이지 않는 임시 드라이브 문자를 순차적으로

할당하여 해당 드라이브로 연결시켜 줍니다.



명령어를 추가로 입력 시 사용하지 않는 드라이브 문자를 순차적으로 할당하고 있습니다.





- POPD

해당 명령어는 PUSHD가 할당받은 드라이브 문자를 반환하는 역할을 합니다.





많이 사용하는 명령어가 아니기 때문에 자주 볼 일은 없지만 꼭 필요할 때가 있기 때문에

이런 명령어도 한번씩 봐주는 것도 나쁘지 않습니다~









 

 

 

 윈도우 명령 프롬프트에서 이벤트 로그를 지우는 방법에 대하여 알아보겠습니다.

wevtutil.exe 를 이용하여 원하는 이벤트 로그를 삭제 할 수 있습니다.

 

 

                      - 명령어

 

        wevtutil.exe cl <LogName>

 

 

                      - 사용방법

 

  wevtutil.exe cl "Application" & wevtutil.exe cl "Security" & wevtutil.exe cl "Setup" & wevtutil.exe cl "System" & wevtutil.exe cl "Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational"

 

 

이렇게 간단하게 이벤트 로그를 삭제할 수 있기 때문에 항상 로그를 백업하는 습관을 들이시는게 좋겠죠.. 해커들이 마지막에 쓰는 명령어 일 수 있다는 거 참고하시구요..

 

 

 

 

 

 






윈도우에서 at 명령어를 이용하여 작업스케줄링을 설정할 수가 있습니다.



  - 사용방법
  AT \\컴퓨터이름 시간 "명령"
    ex) at \\127.0.0.1 15:00 cmd /c "c:\test.exe --"







at 명령어로 설정된 내용을 확인 할 수 있으며, 작업스케줄러에서도 추가된 내용을 확인할수 있습니다.




AT 명령어로 추가 시 작업스케줄러에는 At1, At2... 이런 이름으로 등록이 되어집니다.

관리자 계정을 탈취당한 경우라면 원격 컴퓨터에도 스케쥴을 설정할 수 있기 때문에 원격 PC를 손 쉽게 감염시 킬 수 있습니다. 개인의 경우야 이런일이 거의 없겠지만은 직장내에서는 충분히 여지가 있기 때문에 한번 쯤 작업 스케줄러를 점검하시는 것도 좋습니다.











가끔 대용량 파일을 생성하여 테스트할 경우가 종종 있는데 그 때마다 어떻게 큰 파일을 만들지 고민한 적이 많았었는데 한 번은 개발자 부장님께서 알 수 없는 명령어로 뚝딱 만들어 주던 기억이 나서 이리저리 검색을 통해 방법을 알아 냈습니다..

바로 fsutil dd 란 명령어입니다.

윈도우는 fsutil, 리눅스는 dd 라는 명령어를 이용하여 생성할 수 있습니다.

  - 사용방법
  fsutil file createnew [filename] [filesize]
    ex) fsutil file createnew test 102400
          --> test 란 이름으로 1MB 의 파일이 생성된다.

  dd if=/dev/zero of=[위치 및 파일명] bs=[filesize] count=[반복횟수]
    ex) dd if=/dev/zero of=/root/test.txt bs=100M count=1
         --> text.txt 란 이름으로 100MB 의 파일이 생성된다.
         count가 2일 경우 200MB 가 생성된다.



 ※ 주의할 점은 fsutil의 경우 동일한 파일명이나 폴더가 존재할 경우 에러가 나며, dd 는 덮어쓰기가 됩니다.

간단하지만 모르면 불편하기 때문에 테스트를 많이 하시는 분들은 꼭 알아두면 유용한 명령어인거 같습니다.


 




UPX 로 패킹된 파일을 OllyDBG 를 이용하여 언패킹하는 과정에 대하여 알아 보겠습니다.

언패킹을 하기 전 필요한 툴 들이 있습니다.
- OllyDBG, OllyDump, LordPE, PEID

OllyDump의 경우는 플러그인으로 설치하시면 됩니다.

우선 언패킹을 하기 위해서는 해당 파일이 어떤 종류로 패킹이 되었는지 확인 할 필요가 있겠죠.. PEID 툴을 이용하여 확인 해 봅니다. 타겟 파일을 선택하니 UPX로 압축이 되었다고 나오네요..





그럼 타겟 파일을 OllyDBG로 불러옵니다. UPX 방식은 맨 마지막에 OEP (Original Entry Point)로 갈 수 있도록 표시를 해놓기 때문에 프로그램 코드 맨 밑에서 부터 훑어보면 JMP 명령어를 찾을 수 있으며 점프 명령어가 가리키는 곳이 OEP 입니다. 실제 프로그램에 진입하는 지점이라고 보시면 됩니다.





다음으로 JMP 명령어에 F2를 눌러 BP(Brack Point)를 걸어 두고
F9를 누르면 BP를 걸어 둔 곳에서 멈추게 됩니다.





여기에서 F8을 눌러 한 단계 진행해봅니다. 새로운 코드들이 보이시죠? 이 부분이 바로 OEP입니다.





이제 이 부분을 덤프를 뜨면 됩니다. 해당 코드에서 마우스 우측 클릭하여
[Dump debugged process]를 클릭 한 후 파일로 저장합니다.





이 때 [Rebuild Import] 부분은 체크 해제한 후 Dump 버튼을 클릭하여 새로운 이름으로 저장합니다.





저장 된 파일을 실행 시켜보면 에러가 나는데 LordPE 툴을 이용하여 오류난 파일을 복구 해 주기만 하면 됩니다.







정상적으로 언패킹이 되었는지 PEID 툴을 이용하여 확인 해 보니 Borland Delphi로 만들어졌네요..






저는 주로 툴 을 이용하여 언패킹을 하지만 잊어버리지 않기 위해서 가끔씩 수동으로 해보기도 합니다. 이 놈의 뇌구조가 오래 저장하지 못해서이기도 하구요 ㅋㅋ







The Add-in “Kaspersky Mail Checker” (C:\Program Files (x86)\Kaspersky Lab\Kaspersky Anti-Virus 6.0 for Windows Workstations MP4\mcou.dll) cannot be loaded and has been disabled by Outlook

 
 
카스퍼스키 백신 프로그램 설치 후 Outlook 실행 시 에러메시지 때문에 머리가 빡 돌아가시는 줄 알았습니다. 메일을 클릭할 때마다 나타나서는 저를 괴롭히더군요..ㅡㅡㅋ

에러 메시지를 보니 아웃룩에서 메일 체커를 로드하지 못해서 disable 했다네요.. 쩝..

어쨋든 레지스트리에서 mcou.dll 을 빼고 다시 로드하면 됩니다.



명령어를 이용한 방법이므로 시작 --> 실행에서 아래 명령어를 쏴줍니다.

1. regsvr32 -u <"카스퍼스키설치 경로">\mcou.dll
2. regsvr32 <"카스퍼스키설치 경로">\mcou.dll


예)regsvr32 -u "C:\Program Files (x86)\Kaspersky Lab\Kaspersky Anti-Virus 6.0 for Windows Workstations MP4\mcou.dll"




명령어 두 줄이면 끝납니다.
저와 같은 경험하시는 분들은 이걸로 두통 해결하세요~










지난 번 윈도우 정품 인증을 제대로 받지않아 2 시간 마다 무한 재부팅이 되는 현상이 발생하였는데
대부분의 사용자가 이러한 사실을 알지 못해 당황하신 분들이 많을 거 같아 증상확인 및
해결방법을 알아보도록 하겠습니다.


● 윈도우 2시간 마다 재부팅 되는 현상 (2011/09/05)


자신의 PC가 간헐적으로 재부팅이 된다면 우선 이벤트로그를 먼저 살펴봅니다. (윈도우7 기준)

1. 제어판 -> 관리도구 -> 이벤트 뷰어 -> Windows 로그 -> 시스템

2. 로그 필터링
   : 작업탭에서 현재 로그 필터링을 통해 발생한 일시와 이벤트ID 6008 을 입력하여 필터링합니다.




3. 재부팅 발생 시점부터 약 2시간 간격으로 비정상적으로 종료가 되었는지 확인 합니다.
  





확인 시 2시간 간격으로 재부팅이 확인되면 윈도우 인증이 정상적으로 이루어지지 않은겁니다.

윈도우에서 정품인증을 확인하면 정상적으로 인증이 되었다고 나오는데요
더 웃긴건 영구인증까지 이루어졌다고 나옵니다.. 쩝.. ㅡㅡㅋ




하지만 콘솔에서 인증확인 명령어로 확인하면 평가종료날짜가 표시가 됩니다.
아래 명령어로 확인해보시면 됩니다.
C:\ slmgr /dlv


                                     <정상적으로 인증을 받은 경우>



                             <인증이 정상적으로 이루어지지 않은 경우>



자~ 이제 원인을 찾았으니 해결을 해야겠지요~~
아래 방법으로 재 인증을 받으시면 되구요
혹여 라이센스키가 없을 경우 인터넷에 돌아다니는 인증 프로그램을 이용하셔도 됩니다.



- 해결방법

1. 기존의 설치된 제품키를 삭제합니다.





2. 새로운 제품키를 입력합니다.





3. 윈도우 정품인증을 받습니다.





4. 정상적으로 인증이 되었는지 확인합니다.












Adobe Flash Player 를 이용한 악성코드 공격이 증가함에 따라 감염되지 않기 위해서는 
항상 최신버전으로 유지해야 합니다.

윈도우 업데이트의 경우 자동으로 업데이트 여부를 확인할 수 있으나 Adobe Flash Player의 경우는
사용자가 관심을 가지고 주기적으로 업데이트를 확인 해줘야 하는 번거러움이 있어
대부분 업데이트를 하지 않으시는 분들이 많이 있습니다.
또 상당 수 업데이트를 어떻게 하는지 모르시는 분들도 있어 업데이트 하는 방법을 알아보도록 하겠습니다.

업데이트 하는 방법은 두 가지가 있습니다.

   1. 제어판에서 업데이트 하는 방법

      - "제어판" > "Flash Player" > "고급탭" 에서 [지금 확인] 버튼을 클릭한다.

 




  - 플레이어 다운로드 센터를 클릭 하여 최신버전을 다운로드 받는다.






   2. 홈페이지에서 업데이트 하는 방법
       http://get.adobe.com/kr/flashplayer/ 에 방문하여 Adobe Flash Player 최신버전을 설치한다.
       구글 툴바는 필요에 따라 설치 하시면 됩니다.