Monday, March 24, 2014

파밍으로 악용될 수 있는 DNS Spoofing 에 대해 알아보자.



 Client 에 의한 Domain Name 의 해석 요청이 있을시 
먼저 Hosts 화일을 확인하고, 없다면 DNS Cache 를 확인하게 된다.
Cache 에도 존재하지 않다면 설정된 DNS Server 에 Query 를 보낸다.
그렇게 해서 DNS Server 에서 Client 에게 전달하게 된다.

이 중간에 해커 P/C가 희생자의 Gateway 인척 Mac address 를 속이게 되면 
DNS Query 에대한 답을 Server 측에서 보내는것 처럼 속여 해커가 임의로 만든
사이트로 희생자가 접속하게 된다. 결국 파밍 사이트를 리얼사이트와 동일하게 만들면
파밍 사기에 속을 수 밖에 없게된다.
테스트를 위해 vmware 위에 2개의 xp(희생양과 공격자가 구성한 web server)
그리고 공격자는 BT5r3를 사용한다.
희생양 IP: 192.168.92.131, 공격자 IP 192.168.92.128

먼저 희생양이 되는 P.C 의 ARP Table 을 확인해보자



위와 같이 Gateway는 192.168.92.2 를 가르키고 MAC은 f7:14:99 임을 기억하자.

여기서 공격자가 내부 내트웍에 있으므로 ARP Spoofing 공격을 하게되면
공격자의 Mac 을 희생양의 Gateway 인척 속이게 된다.
arpspoof -i [interface] -t [target] [host]
이명령은 target 으로 현재 interface를 host가 가지는 mac 으로 인식되게끔 변조 시킨다.
그리고 다시 희생양의 arp table 을 확인하게 되면 

위와 같이 gateway의 물리적주소가 변조 된것을 확인할 수 있다.
이제는 외부로 나가는 data는 모두 gateway 를 거쳐야 하므로 공격자의 P/C를
거쳐서 나가게 된다는 것이다.
이렇게 되면 모든 data를 스니핑이 가능하지만 아직 해줘야 할 작업이 남았다.
공격자가 받은 data를 forwarding 시켜줘야 희생양 P.C에서 정상적으로 data를 
보낸것처럼 인식 될것이다. 이러한 forwarding 작업이 없으면 희생양 P/C 에선
internet 을 사용할 수 없게 될것이다. 말 그대로 해커 P.C에서 packet 을 먹어버리고 
만것이다.

forwarding 작업을 위해서 Backtrack에선 2가지 방법이 있다.
첫번째는
#echo 1 > /proc/sys/net/ipv4/ip_forward 
로 ip_forwarding값을 1(true)로 변경하는 방법과
두번째로
fragrouter -B1   이라는 명령으로 전달하는 방법이 있다.

forwarding 한후 
먼저 dnsspoofing 에 사용할 화일을 만들어 주자.
----------------------------------
#touch ./test.txt
10.10.10.10        www.bank.com
:wq!
----------------------------------
라인을 구분자로 여러줄 등록해도 무관하다.

위의 IP주소는 해커가 만들어 놓은 웹서버의 IP 주소를 넣으면 된다.
그리고 그 뒤에는 사용자가 접속하는 도메인네임인데 사용자가
www.bank.com 으로 접속하려 할 때 이를 catch 해서 해커가 10.10.10.10 이라는
주소로 redirecting 시켜 버린다. 결국 희생양 P/C 는 www.bank.com 과 동일하게
생성시켜 놓은 파밍사이트로 접근하게 되어 위험해 지는 것이다.

dnsspoofing 화일을 만들었다면 마지막으로
dnsspoof -i [interface] -f [화일명] 으로 dnsspoofing 을 시도해보자

희생양 P.C가 www.bank.com 으로 접을할 때 마다 변조된 query를 날렸다고
알려올 것이다.
이제 희생양 P.C에서 www.bank.com 으로 접속해보자.
필자는 www.bank.com 이 아닌 www.google.com 으로 했다.
그리고 webserver 는 따로 구성하지 않았으니, nslookup 으로 확인해보겠다.


위와 같이 10.10.10.10 이라는 IP 주소가 www.google.com 이라는 query 가왔다.
물론 해커가 변조한 query이다.
이제는 희생양 P.C가 www.google.com 으로 접속할 때 마다 해커가 구성해 놓은
파밍 webserver 10.10.10.10 으로 접속하게 된다.

이러한 LAN 환경에서의 DNS Spoofing 을 예방하기 위해선 arp table을 수동으로
구성해 gateway Mac 변조를 사전에 막는것이다.


































Saturday, March 22, 2014

Perl 을 이용한 중복화일 찾기



중복된 화일을 찾아주는 스크립트
화일 이름은 다르나 내용은 같은 즉, md5 hash 값을 기준으로 동일한
파일을 찾아준다.
이미지나 음악화일, 혹은 동영상 등등 중복된 화일을 찾을 수 있다.
활용한다면 중복 화일을 찾아 지우는것 활용해 볼 수 있다.

===========================================
#!/usr/bin/perl

use strict;
use warnings;
use File::Find;
use Digest::MD5;

#중복화일의 리스트를 담은 배열을 리턴
sub find_dups(@)
{
#인자로 넘겨받은 디렉토리
my @dir_list = @_;
if($#dir_list < 0) {
return (undef);
}

#size로 인덱싱됨.
my %files;

#화일 트리를 돌면서 모든 화일을 찾아 비슷한 사이즈의 화일을 담는다.
find( sub {
-f &&
push @{$files{(stat(_))[7]}}, $File::Find::name
}, @dir_list
);

my @result = ();

#md5 가 같은지
foreach my $size (keys %files) {
if ($#{$files{$size}} < 1) {
next;
}
my %md5; #file name array hash

#loop 돌면서 md5 sum check
foreach my $cur_file (@{$files{$size}}) {
open(FILE, $cur_file) or next;
binmode(FILE);
push @{$md5{
Digest::MD5->new->addfile(*FILE)->hexdigest}
}, $cur_file;
close (FILE);
}

#중복 검사
foreach my $hash (keys %md5){
if ($#{$md5{$hash}} >= 1) {
push(@result, [@{$md5{$hash}}]);
}
}
}
return @result
}

my @dups = find_dups(@ARGV);

foreach my $cur_dup (@dups) {
print "Duplicates\n";
foreach my $cur_file (@$cur_dup) {
print "\t$cur_file\n";
}
}
=============================================




Friday, March 21, 2014

Perl 을 이용한 file의 무결성 확인




 자신의 PC에서 어떠한 중요한 화일이 있다면 이 화일이 누군가에 의해서 변경되는것을
원치 않을 것이다. 혹은 의도하지 않은 어떤 변경으로 인해 이 화일이 변경되었는지
점검을 하고 싶을 수도 있고, 해킹이 되었는지 확인 하고 싶을것이다.

또는 소프트웨어 업그레이드가 어떠한 부분들을 건드리는지 궁금하다면 아래의
Perl Script를 사용하면 도움이 될것이다.

디렉토리 트리를 검색하기 위해 File::Find 모듈을 사용한다.

======================================
use strict;
use warnings;
use File::Find;
use Digest::MD5;
use Storable qw(nstore retrieve);

# 변경정보를 담는 화일을 생성
my $info_file_name = ".change.info";

#지정한 디렉토리내의 각 화일의 메시지 다이제스트 값을 생성 저장
sub md5($){
my $cur_file = shift;

open(FILE, $cur_file) or return ("");
binmode(FILE);
my $result = Digest::MD5->new->addfile(*FILE)->hexdigest;
close (FILE);
return ($result);
}

#최초 혹은 마지막으로 실행했을때의 화일의 md5값(비교대상)
my $file_info;

#현재 화일의 md5 hash값
my %real_info;

my @dir_list = @ARGV;

#화일이 있다면 정보를 읽어 들인다.
if (-f $info_file_name) {
$file_info = retrieve($info_file_name);
}

if ($#dir_list < 0){
print "Nothing to look at\n";
exit (0);
}

find( sub{
-f && ($real_info{$File::Find::name} = md5($_));
},@dir_list
);


#예전 화일의 md hash값과 현재의 md hash 값을 비교하여
# 새로 생성되었는지, 변경되었는지, 삭제 되었는지 확인.
foreach my $file (sort keys %real_info) {
if (not defined($file_info->{$file})){
print "New file: $file\n";
} else {
if ($real_info{$file} ne $file_info->{$file}){
print "Changed: $file\n";
}
delete $file_info->{$file};
}
}

foreach my $file (sort keys %$file_info){
print "Deleted: $file\n";
}

nstore \%real_info, $info_file_name;
========================================

한가지 단점은 실행할때마다 $file_info->{} 해시값이 %real_info 해시값으로
대체가 된다는 점이다. 즉 실행할 때 마다 현재의 값을 저장함으로 이전값과의
비교는 안된다는 점이다.
비교를 위해 실행한 후에는 그 결과값을 잘 저장을 해둬야 한다는 말씀!

무결성이 중요한 문서의 경우 이런 방법으로 문서의 위,변조를 확인 할 수 있다.













인텔 기반 데스크탑에 Mac OS X Mavericks 설치하기(해킨토시,hackintosh)


 흔히 해킨토시라고 하는 인텔 기반의 데스크탑에 OS X 를 설치하는 법을 알려 드립니다.
여러가지 방법이 있지만 여기에선 App store 에서 무료로 배포중인 버전 10.9.2
Mavericks 를 이용해 설치를 진행합니다.
따라서, 기본적으로 준비 하셔야 할것은 OS X 가 설치된 시스템 혹은 OS X 이미지를 구하셔서 가상머신 (VMWare)에 설치를 하셔야 합니다.

하지만 가상머신으로 OS X 를 설치할 경우 아래의 Unibeast 가 동작하지 않는것으로
알고 있습니다. 가상 머신을 설치하여 가상머신에서 인스톨 USB를 만드는 방법은
myHack 이라는 프로그램을 인터넷 검색으로 참고하셔서 진행 바랍니다.

아래 방법은 주위에 OS X 가 설치된 MacBook 이 있을경우 진행하시면 됩니다.

VMWare 에 OS X 를 설치하는 법은 이미 인터넷에 많은 자료들이 있을테니 확인하시고
설치 진행하시면 됩니다.(VMWare 설치이후 Unlocker 해주셔야 설치OS 메뉴에
OS X 가 보이니 참고하시고)

준비물
1. 8 Giga byte 이상 용량의 USB
2. OS X 가 설치된 시스템(VMWare 위에 설치된 OS X 도 관계없음)
3. 해킨토시 설치에 적합한 인텔 계열 cpu 와 board(Gigabyte,Asus...)
     자신의 보드의 DSDT.aml 화일이 있는지 아래에서 확인.

---아래의 두 화일은 OS X 시스템에서 다운로드 받아야 합니다.---
3. tonymacx86.com 에서 배포하는 unibeast, multi-beast
    여기 에서 다운로드 가능합니다. 가입하셔야 다운로드 가능합니다.
4. 자신이 가진 메인보드의 DSDT 화일
    여기 에서 다운로드 가능합니다.(역시 가입하셔야 다운로드 가능)
    다운로드 받으셔서 DSDT.aml 로 이름을 변경해주세요.
5. 시간과 열정

Uni-beast라는 프로그램은 앞으로 Appstore 에서 받게 될 Mavericks 이미지를
USB에 부팅가능한 이미지로 복사를 하는 프로그램입니다. 즉 설치를 위해 필요합니다.

Multi-Beast 라는 프로그램은 부트로더를 심어주는 Util입니다.
OS X는 Bios 라는 개념이 없습니다만 인텔 Desktop에선 Bios에서 모든 하드웨어 장치에
관한 정보를 가지고 있습니다. 이 정보를 OS X 와 연결시켜 OS X가 Desktop 에서도
부팅이 가능하도록 도와주는 역할입니다.


USB 설치 디스크 만들기
1. OS X 가 설치된 시스템에서 App Store 를 방문해 Mavericks를 다운로드 받습니다.
다운로드 받은 화일은 응용 프로그램 밑으로 들어가게 됩니다.

2. USB 를 OS X 에서 사용하기 위해 화일 시스템을 변경 초기화 해야 합니다.
    응용프로그램\유틸리티\Diskutility 를 실행시킵니다.
    좌측에서 해당 USB 를 클릭합니다.



3. 파티션 탭을 누르고 파티션 레이아웃에서 1개의 파티션을 선택합니다.
    (USB의 모든 내용이 삭제되니 중요한 화일이 있으시면 백업하셔야 합니다)

4. 옵션을 눌러 마스터 부트 레코드를 선택합니다.

5. 이름은 USB 로 변경해주시고(나중에 변경가능합니다)
    포멧은 Mac OS (확장 저널링) 으로 선택후 적용버튼을 누릅니다.

자 이제 USB Disk 가 준비되었습니다.
이 USB DISK에 이전에 받았던 Multi-Beast , 메인보드 DSDT 화일
을 넣어주세요.


USB 에 설치 이미지 복사
위에서 다운로드 받았던 Uni-Beast 를 실행합니다.
계속>계속>계속>동의 를 누릅니다.

설치하려는 Disk 선택에서 USB Disk 를 선택후 계속 버튼을 클릭합니다.

아래와 같이 Mavericks 10.9 를 선택후 계속버튼을 클릭합니다.
주의) App Store 에서 Mavericks 를 다운로드 완료후 진행해야 합니다.

10분~15분 걸립니다. 잠시만 기다리세요.
자 이제 부팅 디스크가 만들어 졌군요.
이제 이 USB 부팅디스크로 부팅을 해 설치할 일만 남았군요.


설치 전 설정
그 전에 Bios 설정으로 들어가 AHCI (Advanced Host Controller Interface) 모드를
사용으로 변경을 해야 합니다.
AHCI 설정 검색하시면 방법들이 나오니 여기선 생략합니다.
AHCI 모드로 변경을 하셨으면 USB로 부팅이 가능하게끔 설정해주시고
USB Disk 를 인텔기반 데스크탑에 삽입후 재부팅합니다.


설치 과정 진입
USB로 제대로 부팅이 되었다면 아래와 같은 부트 로더가 보입니다.
여기서 USB를 선택한후 정상적인 설치화면이 보인다면 다행이지만
그렇지 않을 확률이 아주 큽니다.

만약, 정상적으로 아래처럼 설치단계에 진입하지 못했다면 flag 를 이용해 
부팅을 시도해야 합니다.
화살표를 아래로 내리면 아래와 같은 boot flag를 입력할 수 있는 창이 뜹니다.


아래와 같은 flag를 입력할 수 있는데 필자도 여기에서 이틀이라는 말도 안되는
삽질을 겪었습니다.

GraphicsEnabler=No 
자신의 그래픽카드가 NVIDIA Geforce 6xx/7xx 라면 GraphicsEnabler=No 로
부팅이 가능할 겁니다. 그외의 경우 Yes 로 하셔야 합니다.(Default 는 No 입니다)

-v
Verbose 모드입니다. 부팅과정을 애플 부트 스크린이 아닌 전체 진행과정을 지켜 볼 수 있습니다.

-x
안전모드로서 기본적인 드라이버만 로딩합니다. 

-s싱글 유저모드로서 CLI 를 지원합니다.
(설치 완료후 드라이버 잡는 과정에서 문제가 있어 부팅이 되지 않을경우
-s 로 싱글모드 진입후 # mount -uw /   로 마운트하시면 kext삭제 및 권한 복구 등이
가능해집니다. file system 은 # fsck -fy 로 check 합니다.)

npci=0x3000
Fermi 와 Kepler NVIDIA cards 를 사용하는 메인보드라면 이 옵션을 써야 합니다.


PCIRootUID=0
UniBeast는 기본적으로 PCIRootUID=1 이라는 값을 기본적으로 세팅되어 있습니다.
이 값을 변경시켜 설치화면으로 진입을 시도해 볼 수 있습니다.

nv_disable=1
이 방법은 필자가 사용하는 NVIDIA Geforce GTX 560Ti 에서 진입에 성공한 flag입니다.
기본적으로 Nvidia에서 사용하는 QE/CI 를 사용하지 않고 진입하겠다는 뜻입니다.


그외 전체적인 flag 를 보시려면 아래 방문해서 확인하세요.
http://www.tonymacx86.com/wiki/index.php/Org.chameleon.Boot.plist

정상적으로 설치화면으로 진입한 단계(아래사진)


설치 단계
위 그림처럼 설치단계에 왔다면 한글을 선택 혹은 원하는 언어를 선택후 Next.
OS X를 처음 설치하는 거라면 설치 디스크를 OS X가 인식할 수 있는 화일시스템으로
변경하고 format 을 시켜야 합니다.
상단 메뉴에서 유틸리티를 선택하고 하위메뉴중 디스크 유틸리티를 선택합니다.

좌측에서 해당하는 디스크를 선택하고 파티션 탭에서 1개 선택후
옵션에서 GUID Partition 을 선택합니다.
이름은 Mavericks 로 해주시고 포멧은 Mac OS (확장 저널링) 으로 선택후 적용합니다.

어디에 설치를 할것인지 물어보면 Mavericks Disk 를 지정하고 설치를 진행합니다.
설치 과정은 어려움이 없으니 진행하시면 됩니다.

설치가 모두 끝났다고해서 모든 작업이 끝이 난것이 아닙니다.
아직 우리는 Mavericks Disk에 부트로더를 설치해주지 않았습니다.
(USB로 부팅하지 않을시 부팅되지 않습니다!!!)
일단 USB에 설치된 부트로더를 이용해 Mavericks 에 진입할 수가 있습니다.

설치과정 완료후 재부팅이 되면 USB로 부팅을 하시고 그러면 아래와 같이
Mavericks Disk가 설치되어 있는것을 볼 수 있습니다.

Mavericks 선택하시기 전에 이전에 부팅에 성공했던 flag를 여기서 다시 입력해줘야
제대로 부팅을 할 수가 있습니다.

커서를 이용해 Mavericks로 옮겨주시고 flag를 입력후 부팅합니다.


Multi-Beast 로 부트로더 설치하기
제대로 부팅이 되었다면 USB Disk 에 들어있는 Multi-Beast를 실행합니다.

Quick Start 에선 User DSDT를 선택하여 이전에 받아뒀던 DSDT.aml 화일을 지정해줍니다.
드라이버 탭에선 자신의 하드웨어와 관련된 driver를 설치해 줍니다.
이후 부트로더 탭에서 부트로더를 선택해줍니다.
 모든 설정이 끝났으면 Build 를 선택후 Install 을 선택합니다.



 인스톨이 끝나면 USB가 아닌 Mavericks Disk로 부팅을 하시고 Boot flag 없이
정상적으로 부팅이 된다면 일단 설치가 완료가 된것입니다.

OS X 의 성능과 App store 의 풍만함을 느껴볼 차례입니다.