CreateMutex
까보면 다나와~
분류 전체보기 (216)

Cuckoo :: Installing Cuckoo Sandbox on Ubuntu 12.04 LTS for Malware Analysis Leave a comment

http://www.xors.me/?p=4458


Cuckoo 설명서 보다 잘 적어놨네요.


System Requirements:
Ubuntu 12.04 LTS Desktop (64Bit) w/ 2 CPU, 2GB Memory, and 20GB Partition

Install Ubuntu
:: Once Ubuntu is launched, press Ctrl-Alt-t for a Terminal

Enter new ‘root’ password
# sudo passwd
# su – <Enter root password>

Upgrade all your Ubuntu packages
# apt-get update
# apt-get upgrade

Install Python packages
# apt-get install python python-magic python-dpkt python-mako

Install tcpdump (Ubuntu already has this, so you may not need it)
# apt-get install tcpdump
# setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

Install git to download from repositories
# apt-get install git
# cd /opt

Install Cuckoo Sandbox
# git clone git://github.com/cuckoobox/cuckoo.git

Cloning into ‘cuckoo’…
remote: Counting objects: 3363, done.
remote: Compressing objects: 100% (1250/1250), done.
remote: Total 3363 (delta 2137), reused 3229 (delta 2008)
Receiving objects: 100% (3363/3363), 3.71 MiB | 438 KiB/s, done.
Resolving deltas: 100% (2137/2137), done.

Install Oracle VirtualBox (All Distributions)
# wget http://download.virtualbox.org/virtualbox/4.1.16/VirtualBox-4.1.16-78094-Linux_amd64.run
# chmod u+x VirtualBox-4.1.16-78094-Linux_amd64.run
# ./VirtualBox-4.1.16-78094-Linux_amd64.run

Verifying archive integrity… All good.
Uncompressing VirtualBox for Linux installation………..
VirtualBox Version 4.1.16 r78094 (2012-02-20T13:13:38Z) installer
Installing VirtualBox to /opt/VirtualBox

Install Oracle VirtualBox (SDK)
# wget http://download.virtualbox.org/virtualbox/4.1.16/VirtualBoxSDK-4.1.16-78094.zip
# unzip VirtualBoxSDK-4.1.16-78094.zip
# cd /opt/sdk/installer
# python vboxapisetup.py install

Traceback (most recent call last):
  File “vboxapisetup.py”, line 76, in <module>
    main(sys.argv)
  File “vboxapisetup.py”, line 50, in main
    raise Exception(“No VBOX_INSTALL_PATH defined, exiting”)
Exception: No VBOX_INSTALL_PATH defined, exiting

Opps! Add the required ‘VBOX_INSTALL_PATH’ path
# VBOX_INSTALL_PATH=/opt/VirtualBox python vboxapisetup.py install

running install
running build
running build_py
creating build
creating build/lib.linux-x86_64-2.7
creating build/lib.linux-x86_64-2.7/vboxapi
copying vboxapi/VirtualBox_constants.py -> build/lib.linux-x86_64-2.7/vboxapi
copying vboxapi/__init__.py -> build/lib.linux-x86_64-2.7/vboxapi
running install_lib
copying build/lib.linux-x86_64-2.7/vboxapi/VirtualBox_constants.py -> /usr/local/lib/python2.7/dist-packages/vboxapi
copying build/lib.linux-x86_64-2.7/vboxapi/__init__.py -> /usr/local/lib/python2.7/dist-packages/vboxapi
byte-compiling /usr/local/lib/python2.7/dist-packages/vboxapi/__init__.py to __init__.pyc
running install_egg_info
Removing /usr/local/lib/python2.7/dist-packages/vboxapi-1.0.egg-info
Writing /usr/local/lib/python2.7/dist-packages/vboxapi-1.0.egg-info

Relocate SDK files into VirtualBox install directory
# mv sdk /opt/VirtualBox/sdk

Modify Cuckoo Configuration File
# cd /opt/cuckoo/conf
# vi cuckoo.conf

Enable Sniffer Option
[Sniffer]
# Enable or disable the following option by assigning a True or False value.
# In case you decide to disable it, you’re supposed to either not have any
# network dump or to used VirtualBox’s (or any other virtualization engine
# you are using) to handle the network monitoring instead of using an external
# sniffer such as tcpdump. [on/off]
sniffer = on

:: This pertains to the number of VMs you will configure later in the .conf file
[VirtualMachines]
# List virtual machines IDs separated by commas.
enabled = cuckoo1

:: Make sure the ‘username’ and ‘password’ matches the default logged in user in the Guest OS
:: Leave the ‘share’ section alone, as this is where the Host OS scripts will be stored to share with the Guest OS
[cuckoo1]
name = cuckoo1
username = myWindowsUsername
password = myWindowsPassword
# Please notice that the shared folder name must coincide with the current
# virtual machine id, which is the name you assigned between the square
# brackets (e.g. [cuckoo1]).
share = shares/cuckoo1

Creating Virtual Machine
:: This is were the majority of your problems may occur.  Try to follow the instructions in detail.
# mkdir /opt/vms
# virtualbox

:: Under ‘File/Preferences’ change the Default Virtual Machine Folder to -> ‘/opt/vms’

Install the Guest OS
:: Make sure you create a VM name ‘cuckoo1′ running Windows XP (SP3) or Windows 7; For Windows XP use 256 MB or Windows 7 use 1024 MB of memory. For the Hard Drive (HD) parameters, select ‘fixed storage’ for better performance. The HD storage space will depend on what you want to install, meaning the ‘vulnerable’ application to use (ie. MS Office, Adobe Reader, etc.)

Please Note: Make sure you create or change your default user account in Windows to match what we configured in the cuckoo.conf file.  Make sure you also change the user account password to reflect what is in the .conf file.

Download Python 2.7 for Guest OS
:: Install Python into the default location C:\Python2.7\

http://www.python.org/getit/releases/2.7/

Disable Guest OS Firewall
:: Go to the Network Adapter Advanced Settings and disable the running Guest OS Windows Firewall

Install VirtualBox Oracle VM VirtualBox Guest Additions
:: Select Devices/Install Guest Additions… (Reboot of OS is required)

Configuring Virtual Machine for Cuckoo Sandbox
Enable Network .PCAP Dump
# mkdir /opt/cuckoo/shares/cuckoo1
# VBoxManage controlvm “cuckoo1″ poweroff
# VBoxManage modifyvm “cuckoo1″ –nictrace1 on –nictracefile1 /opt/cuckoo/shares/cuckoo1/dump.pcap

Creating Guest OS Shared Folders (to obtain Host OS Python scripts access used by Cuckoo)
# VBoxManage sharedfolder add “cuckoo1″ –name “setup” –hostpath “/opt/cuckoo/shares/setup”
# VBoxManage sharedfolder add “cuckoo1″ –name “cuckoo1″ –hostpath “/opt/cuckoo/shares/cuckoo1″

Installing Guest OS Vulnerable Applications
# VBoxManage startvm “cuckoo1″

Download old versions of applications from http://www.oldapps.com/
:: You may want to consider installing:
Microsoft Office 2003/2007; Adobe Reader 9; Adobe Flash 10; Oracle Java 6; Mozilla Firefox 11;

:: Make sure you disable all auto update features in the OS and Applications
Please Note: Remove anything unnecessary registry keys in the HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, however leave the ‘VirtualBox Guest Additions’ key

Verify Guest OS shares are accessible to Host OS
:: Start/Run, then type in ‘\\vboxsvr’.  You should see two shares ‘\\vboxsvr\setup’ & ‘\\vboxsvr\cuckoo1′
Please Note: I found connecting to the shares important.  If I didn’t, Cuckoo would quickly close the VM afterwards, without analyzing code.

Verify Guest OS is ready for malware analysis
:: Reboot the Guest OS, log in and leave it running for 5 – 10 minutes.
Make sure:
1) All OS or Application Updates are disabled.
2) All Applications are launched at least once, to accept default Licensing Agreements.
3) Make sure you disabled the Guest OS Firewall.
Once you are satisfied that nothing unwanted will pop-up or prompt you during the malware analysis stage continue to the next step.

Create a Guest OS Clean Snapshot
# VBoxManage snapshot “cuckoo1″ take “baseImage” –pause
# VBoxManage controlvm “cuckoo1″ poweroff
# VBoxManage snapshot “cuckoo1″ restorecurrent

Testing Cuckoo Sandbox (for the First Time)
# cd /opt/cuckoo
# ./cuckoo.py
                     _                  
    ____ _   _  ____| |  _ ___   ___    
   / ___) | | |/ ___) |_/ ) _ \ / _ \ 
  ( (___| |_| ( (___|  _ ( |_| | |_| |  
   \____)____/ \____)_| \_)___/ \___/ v0.3.2

 www.cuckoobox.org
 Copyright (C) 2010-2012

[2012-02-20 18:58:19,311] [Core.Init] INFO: Started.
[2012-02-20 18:58:19,386] [VirtualMachine.Check] INFO: Your VirtualBox version is: “4.1.16″, good!
[2012-02-20 18:58:19,387] [Core.Init] INFO: Populating virtual machines pool…
[2012-02-20 18:58:19,390] [VirtualMachine] ERROR: Virtual machine “Cuckoo1″ not found: 0x80bb0001 (Could not find a registered machine named ‘Cuckoo1′)
[2012-02-20 18:58:19,390] [VirtualMachine.Restore] ERROR: No virtual machine handle.
[2012-02-20 18:58:19,390] [VirtualMachine.Infos] ERROR: No virtual machine handle.
[2012-02-20 18:58:19,390] [Core.Init] CRITICAL: None of the virtual machines are available. Please review the errors.

Opps! Seems like my cuckoo.conf has a typo.  Make sure your VM name (inc. Case) matches ‘exactly’ is in the .conf file. Let’s try again:
# ./cuckoo.py
                    _                  
    ____ _   _  ____| |  _ ___   ___    
   / ___) | | |/ ___) |_/ ) _ \ / _ \ 
  ( (___| |_| ( (___|  _ ( |_| | |_| |  
   \____)____/ \____)_| \_)___/ \___/ v0.3.2

 www.cuckoobox.org
 Copyright (C) 2010-2012

[2012-02-20 19:02:22,059] [Core.Init] INFO: Started.

————————————[ERROR]————————————-
Cuckoo stumbled in an unhandled error!
Before reporting the problem, please run with latest release from the development
Git repository at:
  http://github.com/cuckoobox/cuckoo
If the exception persists, please send the following traceback to:
  cuckoo@public.honeynet.org
The developers will try to reproduce the bug, fix it and get in touch with you.

———————————-[TRACEBACK]———————————–
Cuckoo version: v0.3.2
Python version: 2.7.3 (default, Jan 20 2012, 22:39:59) 
[GCC 4.6.3]
OS: linux2
Command line: ./cuckoo.py
Traceback (most recent call last):
  File “./cuckoo.py”, line 665, in <module>
    if not VirtualMachine().check():
  File “/opt/cuckoo/cuckoo/core/virtualbox.py”, line 54, in __init__
    vbm = vboxapi.VirtualBoxManager(None, None)
  File “/usr/local/lib/python2.7/dist-packages/vboxapi/__init__.py”, line 513, in __init__
    exec “self.platform = Platform”+style+”(platparams)”
  File “<string>”, line 1, in <module>
  File “/usr/local/lib/python2.7/dist-packages/vboxapi/__init__.py”, line 349, in __init__
    import xpcom.vboxxpcom
ImportError: No module named xpcom.vboxxpcom
——————————————————————————–

Opps! Seems like it is not finding the VirtualBox SDK APIs.  Let’s put the proper environment variables in.
# vi /etc/environment

Add the following line:
PYTHONPATH=”/opt/VirtualBox/:/opt/VirtualBox/sdk/bindings/xpcom/python/”

Close the terminal and re-open it.  Let’s try again:
Open a new Terminal (Ctrl-Alt-T)
# su – <Enter root password>
# cd /opt/cuckoo
# ./cuckoo.py
                     _                  
    ____ _   _  ____| |  _ ___   ___    
   / ___) | | |/ ___) |_/ ) _ \ / _ \ 
  ( (___| |_| ( (___|  _ ( |_| | |_| |  
   \____)____/ \____)_| \_)___/ \___/ v0.3.2

 www.cuckoobox.org
 Copyright (C) 2010-2012

[2012-02-20 19:01:24,894] [Core.Init] INFO: Started.
[2012-02-20 19:01:24,925] [VirtualMachine.Check] INFO: Your VirtualBox version is: “4.1.16″, good!
[2012-02-20 19:01:24,926] [Core.Init] INFO: Populating virtual machines pool…
[2012-02-20 19:01:24,996] [VirtualMachine.Restore] INFO: Virtual machine “cuckoo1″ successfully restored to current snapshot.
[2012-02-20 19:01:25,441] [VirtualMachine.Infos] INFO: Virtual machine “cuckoo1″ information:
[2012-02-20 19:01:25,442] [VirtualMachine.Infos] INFO:     \_| Name: cuckoo1
[2012-02-20 19:01:25,442] [VirtualMachine.Infos] INFO:       | ID: d959f177-8a5f-4bf5-8e5c-2197fa63aa30
[2012-02-20 19:01:25,443] [VirtualMachine.Infos] INFO:       | CPU Count: 1 Core/s
[2012-02-20 19:01:25,443] [VirtualMachine.Infos] INFO:       | Memory Size: 256 MB
[2012-02-20 19:01:25,443] [VirtualMachine.Infos] INFO:       | VRAM Size: 16 MB
[2012-02-20 19:01:25,443] [VirtualMachine.Infos] INFO:       | State: Saved
[2012-02-20 19:01:25,444] [VirtualMachine.Infos] INFO:       | Current Snapshot: “baseImage”
[2012-02-20 19:01:25,444] [VirtualMachine.Infos] INFO:       | MAC Address: 08:00:01:02:03:04
[2012-02-20 19:01:25,444] [Core.Init] INFO: 1 virtual machine/s added to pool.
[2012-02-20 19:01:25,488] [Database.Init] INFO: Generated database “db/cuckoo.db” which didn’t exist before.

Success! No Errors… Let’s continue.

Testing Cuckoo Sandbox w/ Malware
Open a new Terminal (Ctrl-Alt-T)
# su – <Enter root password>
# cd /opt/cuckoo

*** WARNING ***
The next step is considered dangerous.  If you do not know what you are doing, it is recommended you DO NOT continue. There are various websites which contain a list of recently discovered websites containing malicious URLs, which can be submitted to Cuckoo Sandbox for analysis. If you do not feel comfortable looking for these sites, then search through your mail inbox, as you are bound to have a malicious attachments, which can be used to test out Cuckoo Sandbox.
*** WARNING ***

Cuckoo Sandbox Submission Utility
:: The easiest way to submit an analysis is to use the provided submit.py command-line utility.  The following are some submission examples:

Submit a local binary
# ./submit.py /path/to/binary

Submit a local binary and specify an higher priority
# ./submit.py /path/to/binary –priority 5

Submit a local binary and specify a custom analysis timeout of 60 seconds
# ./submit.py /path/to/binary –timeout 60

Submit a local binary and specify a custom analysis package
# ./submit.py /path/to/binary –package <name of package>

Submit an URL to be downloaded locally and analyzed
# ./submit.py –download http://www.website.tld/file.exe

Submit an URL to be analyzed within Internet Explorer
# ./submit.py –url http://maliciousurl.tld/exploit.php

Submit a local binary to be run on virtual machine cuckoo1
# ./submit.py /path/to/binary –machine cuckoo1

:: If the VM closes very quickly, after spawning, it is a result of either:
A) Guest OS username or password does not match what is in the cuckoo.conf file.
B) You did not manually connect to the \\vboxsvr\setup and \\vboxsvr\cuckoo1 shares, to cache the session.
C) Your \\vboxsvr shares are not mapped to the proper Host OS (ie. /opt/cuckoo/shares) paths.
D) Something is not correct when you enabled your .pcap dump file.

:: You can also enable debug logging to help you out
# vi /opt/cuckoo/conf/cuckoo.conf

[Logging]
# Enable/Disable additional debugging messages. This messages won’t wrote to
# log file but just printed on screen. [on/off]
debug = on

Cuckoo Sandbox Malware Results
All the results are kept in the /opt/cuckoo/analysis directory.  You can also spawn the Cuckoo Sandbox Web Analyzer, which is very pretty:
# cd /opt/cuckoo
# ./web.pl

:: Now launch Firefox in Ubuntu and go to http://127.0.0.1:8080

That’s it folks!  For any other issues, please leave a comment below.  If anyone managed to get Cuckoo running in non-root mode, tell me how.

  Comments,     Trackbacks

Clustering VS Classification

CLUSTERING

- Data is not labeled

- Group points that are "close" to each other

- Identify structure or patterns in data

- Unsupervised learning


CLASSIFICATION

- Labeled data points

- Want a "rule" that assigns labels to new points

- Supervised learning





군집화/분류화 그런 차이? 


  Comments,     Trackbacks

Security Service Disable

Look For Disabled Services
Below are some services the worm disables, if any of these are disabled that you did not disable yourself – you could be infected:

 

wscsvc – Security Center
WinDefend Windows Defender (available in Vista)
wuauserv – Automatic Updates
BITS – Background Intelligent Transfer Service
ERSvc – Error Reporting Service
WerSvc – Windows Error Reporting Service (available in Vista)


Removed Restore Points
The worm removes all system restore points. If you have no system restore points, you may be infected.

 

Removal of Windows Security Center
If the following registry entry is missing, you could be infected: HKLM\Software\Microsoft\Windows\CurrentVersion\explorer\ShellServiceObjects\{FD6905CE-952F-41F1-9A6F-135D9C6622CC}

 

conficker 분석하다가.

  Comments,     Trackbacks

Aho Corasick String Matching in Python

Aho Corasick String Matching in Python

from collections import deque
class State:
    sid = None        ## store the id of state
    value = None      ## stores values of state
    tranList = None    ## used to store the list of next states for transition
    outputSet = None    ## it is set datastructure for storing the outputs at that state
    failState = None

    def __init__(self ,sid, val):
        self.sid = sid
        self.value = val
        self.tranList = []
        self.failState = 0
        self.outputSet = set()

    def getTransition(self, val):
        """ this function gets the next state on input val"""
        for node in self.tranList:
            if node.value == val:
                return node
        return None
   

    def testTransition(self, val):
        """ This checks whether there is transition or not on input val"""
        """ for current state, the transition is always true on any input"""

        if self.sid == 0:    
           return True
        else:
            for nd in self.tranList:
                if nd.value == val:
                    return True
            return False
       
    def addOutput(self, key):
        """This adds the key to the output in the state"""
        self.outputSet = self.outputSet ^ key
       
         
    ##------------------------------------------------------------------------
   

class ahoCorasick:
    root = None
    newstate = None

    def __init__(self):
        self.root = State(0, ' ')
        self.newstate = 0

    def addKeyword(self, keywords):
        """Adds the keyword in the tree"""
   
        for key in keywords.split(' '):
           
            j = 0
            state = 0
            current = self.root
            key = key.upper()

            while j < len(key):
                ch = key[j]
                j = j+ 1
                child = current.getTransition(ch)
                if child != None:
                    current = child
                else:
                    self.newstate = self.newstate +1
                    nd = State(self.newstate, ch)
                    current.tranList.append(nd)
                    current = nd
                    while j < len(key):
                        self.newstate = self.newstate +1
                        nd2 = State(self.newstate, key[j])
                        current.tranList.append(nd2)
                        current = nd2
                        j = j+1
                    break
            current.outputSet.add(key)
       
##-------------------------------------------------------------------
    def setFailTransitions(self):
        """Sets the fail transitions in tree"""
        queue = deque()
        current = self.root
        child = self.root

        for nd in self.root.tranList:
            queue.append(nd)
            nd.failState = self.root

        while len(queue) != 0:
            r = queue.popleft()
            for nd in r.tranList:
                queue.append(nd)
                state = r.failState
                val = nd.value
                current = state
                while True:
                    if current.testTransition(val) == False:
                        current = current.failState
                    else:
                        break
                child = current.getTransition(val)
                if child == None:
                    nd.failState = current
                else:
                    nd.failState = child
            nd.addOutput(nd.failState.outputSet)

##--------------------------------------------------------------------------------------------------
    def findSubstrings(self, findStr):
        """ Finds all substrings of input which are keywords in the tree"""
        for string in findStr.split(' '):
            string = string.upper()
            print "Finding substrings in ", string
            current = self.root
            j = 0
       
            while j < len(string):
                while True:
                    if current.testTransition(string[j]) == False:
                        current = current.failState
                    else:
                        child = current.getTransition(string[j])
##                      print "before break", child.sid
                        break
                if child != None:
##                  print "in none"
                    current = child
                    if len(child.outputSet) != 0:
                        print j
                        itr = iter(child.outputSet)
                        for keyw in itr:
                            print keyw
                j = j + 1   
                   
   
##---------------------------------------------------------
    def displayTree(self):
        """ It is used to display the tree of keywords. Prints ID of node and value of node"""
        queue = deque()
        for nd in self.root.tranList:
            queue.append(nd)

        while len(queue) !=0:
            node = queue.popleft()
            for nd in node.tranList:
                queue.append(nd)
            print node.sid, node.value
           
               
    def displayOutput(self):
        """ This function displays the outputs at a state"""
        queue = deque()
        for nd in self.root.tranList:
            queue.append(nd)

        while len(queue) !=0:
            node = queue.popleft()
            for nd in node.tranList:
                queue.append(nd)
           
            itr = iter(node.outputSet)
            if len(node.outputSet) !=0:
                print node.sid
            for string in itr:
                print string

if (__name__ == "__main__"):
   
    x = ahoCorasick()
    """ Usage: Create object of ahoCorasick
        to enter keywords use addKeyword("string of keywords")
        then call setFailTransitions (fail function)
        to find substrings of string use findSubstrings"""

##    x.addKeyword("he")
##    x.addKeyword("she")
##    x.addKeyword("his")
##    x.addKeyword("hers")
   
##    x.addKeyword("ATC")
##    x.addKeyword("TC")
   
##    x.displayOutput()
   
####    x.enter("help")
####    x.enter("hi")
   
    x.addKeyword("john jane")
  
       
    x.setFailTransitions()
##    x.findSubstrings("ACGATCTCTCGATC")
    x.findSubstrings("johnjane")
  Comments,     Trackbacks

리눅스에서 SSD

http://our-psychommunity.com/blog/lazyman/29


1. 파일시스템 선택 - 저널링없는 ext4

오래된 SSD+Linux 가이드는, 드라이브의 수명을 늘리기 위해서 ext3/ext4 같은 저널링 파일 시스템의 쓰기 낭비를 피하는, ext2 파일 시스템을 추천한다. TRIM 지원이 나타나면서 ext2는 최고의 선택이 아니게 되었다. TRIM 명령은 ext2 파일시스템에서 돌아가지만, 두개의 단점이 있다.

   1. Ext2는 오프라인 TRIM만을 지원한다 - 다시 말하면, 파일시스템을 읽기전용으로 마운트해야한다.
   2. hdprm 이나 hdprm의 랩퍼 스크립트인 wiper.sh 을 사용해서 TRIM 명령어를 직접 실행해야한다.

ext4 파일시스템은 이러한 제한이 없다. ext4 파일시스템에서 저널링 기능을 끌수있게 되면서 ext2 보다 더 나은 선택이 되었다. 저널이 없는 파일시스템은 깨끗이 언마운트되지 않으면(예를 들어, 전원이 갑자기 나갔을 경우) 데이터 손실이 더 쉽다는걸 확실히 알아야 한다. 하지만 이 글을 읽은 이후에는, 드라이브의 수명을 늘리기 위한 기회를 얻을 수 있을 것이다.

ext4의 저널을 어떻게 끌 것인가? 첫번째, 저널의 제거는 파일시스템이 마운트된 상태에서는 할 수 없다. 운영체제가 포함된 드라이브의 저널을 끄려면, 다른 드라이브로 부팅하는게 필요하다. 난 Arch Linux를 사용하고, 우분투 라이브 CD 같은 Arch 인스톨 디스크로 작업했다. 파일시스템 변경 툴의 필요성이 표준 이슈가 되면서, 여러 리눅스 라이브 배포판으로 작업 가능하게 되었다.

다른 디스크로 부팅 했으면, 터미널을 열고 루트 권한을 얻거나 sudo를 사용해 명령어를 입력해라.  저널을 제거하기를 원하는 ext4 파티션이  /dev/sda1 이라고 가정하고, 아래에 따라 작업한다.
명령어:
tune2fs -O ^has_journal /dev/sda1
그리고 나서 파일시스템 검사를 돌리는게 좋다.
e2fsck -f /dev/sda1
두 번째 단계를 완료 하지 않으면 파일 시스템이 마운트 되지 않는다는 보고를 몇개 봤다. 그러니까 건너띄지 말자. 여러분은 SSD를 가지고 있고, fsck는 진짜로 빠르게 진행된다.
컴퓨터를 재시작하고, 저널이 꺼진 ext4 파티션이 포함된 SSD로 부팅하자. 터미널을 열고 실행해라
dmesg | grep EXT4
모든게 잘 됐다면 부팅 과정에서 아래 메시지를 보게 될거다.
EXT4-fs(sda1): mounted filesystem without journal
예전처럼 저널을 추가하고 싶으면, 위 단계를 실행해라. 단, tune2fs 명령에서 caret(^) 을 빼고 나서.

2. TRIM 지원 켜기

TRIM 지원이 없으면, SSD는 결국 엄청 느려질 꺼다. 근본 원인은 SSD가 쓰는 것보다 더 큰 블록 데이터를 지운다는 사실이다. TRIM없이 데이터를 지웠을때, 드라이브 펌웨어는 캐쉬로 전체 블록을 복사하고, 전체 블락을 지우고, 삭제된 데이터를 뺀 캐쉬의 내용을 쓴다. - 블록의 모든 데이터가 파일시스템에서 지워졌다고 표시가 되어있더라도 말이다. TRIM이 있다면, 운영체제는 블록이 파일시스템에서 삭제 된 시점에, free로 표시됐다고 드라이브에게 전달할 수 있다. SSD는 TRIM 지원 펌웨어 발표를 시작할꺼고, 리눅스 커널은 2.6.33 부터 TRIM 지원을 추가하기 시작했다.

처음에 실행중인 커널이 TRIM 지원을 하는지 확인하자. 다음을 실행해라
uname -a
커널 버전 숫자를 봐라. 2.6.33 이거나 더 높으면 커널은 TRIM을 지원할꺼다. 어떤 배포판은 *어쩌면* TRIM 코드를 이전 커널에 집어넣을 수도 있지만, 그런 거까지 조사해본 적은 없다.
다음은, hdparm 명령을 사용해 드라이브가 TRIM을 지원하는지 확인해라. SSD가 /dev/sda1이라고 가정하고 명령어를 넣는다.
hdparm -I /dev/sda
드라이브 기능 목록이 출력될꺼다. 드라이브에서 기능이 지원되는 걸 표시하기위해 * 가 같이 나온다. TRIM이 지원되면 아래줄처럼 보일꺼다.
* Data Set Management TRIM supported
(줄의 시작에 * 표시를 확인해라. 기능을 지원한다는 뜻이다.)
커널과 드라이브가 TRIM을 지원한다고 가정하고, 위에 설명한 ext4 파일 시스템을 사용중이면 /etc/fstab 파일에 “discard” 옵션을 추가하는 걸로 켤 수 있다. ext4 파일시스템을 사용중인 줄을 보고 바꿔라.
이거에서:
/dev/sda1 / ext4 defaults
이걸로:
/dev/sda1 / ext4 discard,defaults
물론, 파티션하고 마운트 지점하고 기존 옵션은 다를꺼다. 요점은 “discard” 옵션을 네번째 행에다가 추가하는 거다. 새로 수정한 fstab파일을 테스트하려면, 루트 권한으로 실행해라:
mount -oremount /dev/sda1
그리고 실행해라
mount
그러면 마운트된 모든 파일시스템이 옵션이랑 같이 보일꺼다. 위의 예제를 사용하면,  작업 중에 알게 된 “discard”옵션을 찾게 된다.
/dev/sda1 on / type ext4 (rw,discard)

3. 스왑을 위해 무엇을 할 것인가

스왑 공간은 SSD를 사용할 때, 미묘한 문제가 있다. 평균 시스텝의 메모리가 수기가 바이트가 되면서  스왑의 필요성이 감소했다. 예로, 난 2GB 메모리를 가지고 여러 가상머신을 돌리고, 기본적인 웹브라우징과 ssh 세션으로도 다 쓰지 못한다. 하지만 여러분의 컴퓨터가 최대절전모드를 사용한다면, 스왑공간은 적어도 시스템의 메모리보다 같아야 한다. 최대 절전모드 중에는 메모리의 내용을 스왑공간에 보관하기 때문이다.

스왑 공간을 가지고 있다면, 시스템의 “swappiness” 파라미터를 변경하는걸 추천한다. Swappiness는 0부터 100까지 숫자이며, 리눅스가 메모리에서 디스크의 스왑 공간으로 데이터를 얼마나 적극적으로 이동 시키는 지를 나타낸다. 숫자가 높으면, 시스템이 메모리 부족시에 스왑으로 이동하는 것을 더욱 선호한다.

현재 swappiness 설정을 보려면,
/proc/sys/vm/swappiness 파일의 내용을 보면 된다.
cat /proc/sys/vm/swappiness
SSD를 사용할때, 나는 swappiness를 항상 1로 설정했다. 스왑공간이 있지만, 가장 까다로운 상황을 빼고는 절대 사용하지 않을것이다. 다시말하면, 이것은 쓰기 회수를 줄여 디스크의 수명을 늘이자는 것이다. swappiness 값을 변경하려면
/etc/rc.local 파일에 아래 줄을 추가해라.
echo 1 > /proc/sys/vm/swappiness
/etc/rc.local 은 시스템 시작시, 다른 모든 초기화 스크립트가 실행된 후에 실행되는 파일이며, 다른 초기화 스크립트 안에 적용되지 않는 최적화를 위해 관리자가 사용하는 것이다.

다른 최적화들...

나머지 팁들은 여러 사이트에 돌아다니는 것들이다. 내 경우엔 잘 작동해서 추가한다.

4. noatime 옵션을 가지고 파일시스템을 마운트하자.

스텝2에서 /etc/fstab 에 “discard” 옵션을 추가한것 처럼, “noatime”옵션을 추가하면 된다. “noatime”을 사용하는 것은, 리눅스가 파일과 디렉토리에 마지막 접근 시간을 갱신하는 것을 막기 위해서다. 드라이브의 수명을 늘리기 위해 쓰기 회수를 줄이고, 약간의 성능 향상도 가져온다. 2단계에서 작업한 것과 같은 파티션을 사용 중이면, /etc/fstab의 그 줄을 
이거에서
/dev/sda1 / ext4 discard,defaults
이걸로 바꾸자.
/dev/sda1 / ext4 noatime,discard,defaults
2단계와 같은 방법으로 fstab파일을 테스트해라. mount 명령어와 -oremount 옵션을 사용한걸 기억하자.
참고: ext2, ext3, ext4 파일시스템에서도 “noatime”옵션 사용이 가능하다.

5. noop 디스크 스케줄러를 사용하자

리눅스는, 디스크를 다루기 위해 읽기 순서와 쓰기 요청을 결정할 책임이 있는 ,몇가지 다른 디스크 스케줄러를 가지고 있다.  noop 스케줄러를 사용하는 것은, 리눅스가  데이터들이 디스크의 물리적인 위치 어디에 놓여 있는지를 전혀 고려하지 않고, 받은 순서대로 요청을 처리하는 간단한 방식을 적용하는 걸 의미한다..
시스템이 사용중인 스케줄러를 보려면
/sys/block/sda/queue/scheduler 의 내용을 보면 된다.
cat /sys/block/sda/queue/scheduler
대괄호 안에 있는게 현재 사용중인 스케줄러다.
[noop] deadline cfq
noop 스케줄러를 사용하도록 하려면
/etc/rc.local 파일에 아래 줄을 추가해라.
echo noop > /sys/blocks/sda/queue/scheduler
그건 그렇고, 리눅스에서 적용할 수 있는 다른 스케줄러를 살펴보려면, 리눅스 매거진의 이 기사를 확인해라.

6. 파이어폭스의 캐쉬를 tmpfs로 옮기자.

대부분의 사용자는, 파이어폭스를 사용하는 것이 디스크 활성화의 가장 큰 비율의 원인이 된다.  디스크의 쓰기 회수를 줄이기 위해서, 캐쉬를 tmpfs 파일시스템으로 옮길 수 있다.  브라우저의 캐쉬는 디스크를 거치지 않고, 물리적인 메모리에(RAM) 저장된다. 물론, 리부팅하면 사라지지만, 대부분의 사람은 그것을 신경쓰지 않을 것이다.
tmpfs 파일 시스템을 만들기 위해 /etc/fstab 파일을 한번 더 수정해야 한다. 아래 줄은 시스템의 /tmp 디렉토리를 tmpfs로 변환시킨다.
none /tmp tmpfs defaults 0 0
재부팅 후에, mount 명령어를 사용해서, 수정사항이 아래 줄처럼 작업되었는지 확인해라.
none on /tmp type tmpfs (rw)
tmpfs 가 생성된 것을 확인했다면, 파이어폭스를 열고 주소창에 about:config 를 입력하자. 마우스 오른쪽 버튼을 클릭하고 새로만들기->문자열 을 선택해라. 환경 설정 이름을 “browser.cache.disk.parent_directory”  으로 입력하고, 문자열 값에 "tmp/firefox-cache"를 집어넣자.
*
파이어폭스를 재시작하고 /tmp 디렉토리 안을 살펴보자. 브라우저의 캐쉬가 새로운 위치에 있는지 확인해라.

결론
기존의 하드 드라이브와 SSD 의 기본적인 차이점을 이해하고 있다면, 왜 수정사항이 이치에 맞는지 쉽게 알 수 있다. 추측하자면, 일이년 안에 이런 직접 변경하는 내용은 필요 없을 것이다. SSD는 주류가 될 것이고, 리눅스 배포판들은 여러분들을 위해 미리 설정되어 나올 것이다. 그러나 지금은, 여러분에게 이 가이드가 도움이 되기를 바란다.

Trackback Address >> http://our-psychommunity.com/blog/lazyman/trackback/29



펌이요~...

결론적으로 Vsphere에서는 크게 소용이 없다는..Trim 지원이 안됌

  Comments,     Trackbacks

How to Compile and Install Linux Kernel 3.1 / 3.0 in Ubuntu 11.10, 11.04, 10.10 and 10.04

How to Compile and Install Linux Kernel 3.1 / 3.0 in Ubuntu 11.10, 11.04, 10.10 and 10.04




Here in this post I will explain how to compile and install Linux Kernel 3.0 and Linux Kernel 3.1 in Ubuntu. Linux Kernel 3.0.1 is the latest stable release and you can download it from kernel.org. If you are new to Linux then I strongly recommend you try with Linux Kernel 3.0 and you can later patch it with Linux Kernel 3.0.1. If you don’t like to compile the kernel, then you can directly install the debian packages Click Here.

Fedora users Click Here.

Update: Follow the same steps to compile and install the Linux Kernel 3.1 in your system.

Dependencies

To compile Linux Kernel the following are required to be installed.

  • gcc latest version,
  • ncurses development package and
  • system packages should be up-to date

To install the dependencies run the following commands in terminal and type the password for the user, when prompted.

For gcc

$ sudo apt-get install gcc

For ncurses development package

$ sudo apt-get install libncurses5-dev

After installing the above packages then update your system by running the following command

$ sudo apt-get update && sudo apt-get upgrade

Now download the Linux Kernel 3.0 from kernel.org or by using the below command. If you are trying with Linux Kernel 3.1 / 3.0.7 then just replace the name linux-3.0 with linux-3.1 / linux-3.0.7 in all commands below.

Update

Download the Kernel source from github, no download link available on kernel.org  Click Here for mirror downloads. 

$ wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.0.tar.bz2

Once the download complete move to the directory where you have downloaded the kernel package “linux-3.0.tar.bz2“. Now extract the tar file to the location “/usr/src/“.

To move to the directory, for example if the downloaded package is in your Downloads directory. Use the below command.

$ cd Downloads/

To extract the tar file run the following command. Type the password for the user when prompted.

$ sudo tar -xvf linux-3.0.tar.bz2 -C /usr/src/

Now move to the directory where the extracted file is, or copy and paste the below command in terminal.

$ cd /usr/src/linux-3.0/

Now you can configure, compile and install Linux Kernel 3.0 in your system. Run the commands one by one and type the password for the user, when prompted.

To Configure

$ sudo make menuconfig

The above command is used to configure the Linux kernel. Once you execute the command, you will get a pop up window with the list of menus and you can select the items for the new configuration. If your unfamiliar with the configuration just check for the file systems menu and check whether ext4 is chosen or not, if not select it and save the configuration. Check the screen shot below for menuconfig.

If you like to have your existing configuration then run the below command.

$ sudo make oldconfig

There are other alternate configuration commands are available and you can find them in README file under linux-3.0 directory.

To Compile

$ sudo make

The above command is used to compile the Linux Kernel. It will take some time to complete it, approximately 40 min to 50 min it depends on your system configuration.

To Install

$ sudo make modules_install install

The above command will install the Linux Kernel 3.0 into your system. It will create some files under /boot/ directory and it will automatically make a entry in your grub.cfg. Check whether it made correct entry and check for the files it created.

The files under /boot/ directory are,

  • System.map-3.0.0
  • vmlinuz-3.0.0
  • initrd.img-3.0.0
  • config-3.0.0

If you unable to find the initrd.img-3.0.0 file then create it. Run the below command to create it.

$ sudo update-initramfs -u -k 3.0.0

Update

If the above command unable to update / generate the initramfs then run the following command to create new initramfs.

$ sudo update-initramfs -c -k 3.0.0

Your grub.cfg file should be like the screen shots(example) below if not edit it.

For Linux Kernel 3.0

For Linux Kernel 3.0.1

To modify the grub.cfg under “/boot/grub/” directory. Open the file using below command.

$ sudo gedit /boot/grub/grub.cfg

After modifying your grub.cfg, update your grub by running the following command.

$ sudo update-grub

Restart your system by default it will boot in Ubuntu 3.0.0, you can able to see while booting. To check after booting open a terminal and type “uname -r“. Check the screen shot below.

Hope this will be helpful for you!!!

출처 : http://www.howopensource.com/2011/08/how-to-compile-and-install-linux-kernel-3-0-in-ubuntu-11-04-10-10-and-10-04/ 

  Comments,     Trackbacks

ahnurl.sys 루트킷 드라이버 분석

1. 드럽퍼에 의한 실행 흐름

 


2. 상세 분석

1) DKOM을 이용한 드라이버 은닉

 

다음은 설치된 ahnurl 드라이버에 대한 오브젝트 일부이다. 드라이버는 스스로를 은닉하기 위해 오브젝트 오프셋 +14h 위치의 (DriverSection) 메모리를 접근한다. DriverSection은 이중 링크드 리스트로 이루어진 드라이버 리스트에 대한 정보를 제공하기 때문에 여기에 접근하여 링크된 리스트 항목의 앞 뒤 드라이버를 자신을 뺀 채 연결하고 자신을 리스트에서 조회되지 않도록 수정한다.

 

2) SSDT Hook

 

악성코드는 자신을 보호하기 위해 다음의 Native API대해 Hook을 한다.

NtQueryDirectoryFile(+244), NtEnumerateKey(+11c), ZwEnumerateValueKey(+124)

 위의 함수들은 레지스트리 및 파일을 조회할 때 호출되는데, 이는 인자값을 감시하여 자신이 원하는 레지스트리나 파일을 삭제하지 못 하도록 보호하기 위함이다. *Hook으로 인해 실행되는 함수는 별도로 분석하지 않았다.

 

3) NtMapViewOfSection API Inline Code Patch

 

우선 NtMapViewOfSection함수를 패치하는 목적은 다음과 같다.

프로세스는 새롭게 생성될 때 OS에 의해 독립적인 유저 메모리를 공간을 할당받고 이 공간을 통해서 코드를 실행한다. 특히 DLL은 효율적인 메모리 활용을 위해 Mapping된 파일을 불러오게 되어 있는데 해당 정보를 조회할 때 NtMapViewOfsection이 호출되게 된다. 따라서 이 함수를 수정하면 DLL이 로드됨과 동시에 자신이 원하는 행동도 임의 실행할 수 있게 되는 것이다.

Patch가 된 NtMapViewOfSection API는 사전에 buffer에 저장한 주소로 점프하게 되는데 해당 주소코드의 역할은 주요 온라인게임 계정을 해킹하는 악성코드 DLL파일을 로드하게 된다.

 

  Comments,     Trackbacks

IDA window(창) 위치 조정

IDA window(창) 위치 조정하려고 기존 프레임에서 분리했을 때 다시 넣으려고 하면
어떻게 다시 넣어지지가 않는 다. 사실 넣어지는데 방법을 모르는 것일 뿐,,
안좋은 기억력을 보유한 뇌를 위해...블로깅

위에 보면 창이 분리된 상태. 다시 기존 프레임에 저장하려면...

위의 파란 선에 있는 회색 얇은 선에 마우스를 가져가면, 'Drag this title to dock somewhere else'라는 문구와 함께
window를 기존 프레임에 끼워 넣을 수 있다.

다 되었다면, Windows 저장 고고~

'툴 정보 및 사용법 > IDA' 카테고리의 다른 글

ida XREF, cross reference reconfiguration  (0) 2014.11.25
IDA 바이너리 분석시 Type Libraries 추가할 것들  (0) 2014.07.22
IDA symbol  (0) 2011.10.10
IDA GUI  (0) 2011.09.20
IDA 2nd Edition 변화된 내용  (1) 2011.08.18
  Comments,     Trackbacks

Windbg 유용한 커널 명령어 정리

>!drvobj <드라이버 이름> //특정 드라이버 오브젝트의 포이터 주소를 이름으로 구하고자 할때 유용

ex)!drvobj atapi 3 //driver entry 및 dispatch routines 정보까지 나온다. 제일 좋음


>dt _driver_object <드라이버 오브젝트 포인터 주소> //드라이버에 대한 자세한 정보


//아래는 해당 정보도 볼 수 있다는 차원에서..

>dt _IRP

>dt _IO_STACK_LOCATION

>dt nt!SCSI_REQUEST_BLOCK //심볼이 없다..

>dt _DRIVER_OBJECT

>!irp FFBC9318 //??

>!devstack

>dt _list_entry


>x nt!KeServiceDescriptorTable //x 명령으로 N api 주소만 알고자 할 때 유용할 듯

8055c220 nt!KeServiceDescriptorTable = <no type information>



>uf nt!ZwMapViewOfSection //해당 함수의 어셈코드를 보여줌, 코드 패치되었나 확인할 때 유용

nt!ZwMapViewOfSection:

804def2c b86c000000      mov     eax,6Ch

804def31 8d542404        lea     edx,[esp+4]

...


>dds KeServiceDescriptorTable //dds 명령으로 이름을 같이 볼 수 있다.

8055c220  804e46a8 nt!KiServiceTable //N api list 포인터 주소

8055c224  00000000

8055c228  0000011c //N api list size

8055c22c  80512088 nt!KiArgumentTable

8055c230  00000000

8055c234  00000000

...


>dds 804e46a8 L11C //역시 dds 명령, L11C는 size(=>dds nt!KiServiceTable)

804e46a8  80591df5 nt!NtAcceptConnectPort

...


>lm d t //로드, 언로드된 모듈 리스트 정보


>ln CLASSPNP!ClassInternalIoControl //?

>ed 81b7dfac f99e0fc3 //메모리 변경 같음

추가..(2012-12)

>dt _object_type //


  Comments,     Trackbacks

중궁 왕망령?

http://blog.naver.com/koaram77/40154682252

꼭 가보고 싶은 곳 추가~ 역시 중국은 스케일이...ㄷㄷ

'아리스리생각 > 죽기전에 가봐야 할 곳' 카테고리의 다른 글

동화속의 나라?? 독일  (0) 2012.11.13
추천 포스팅  (0) 2012.09.21
  Comments,     Trackbacks