2016년 11월 18일 금요일

Admin tool_Samsung Recovery Solution 7(SRS7)삼성 노트북 복구영역 설치 및 복구

친구가 노트북을 하나 구입해달라고 요청하여 삼성 노트북 9 시리즈 하나를 구입했다.
미국인 친구라서 한국어판 윈도우즈를 구입해서 쓰기가 좀 그래서 Freedos 버전으로 저렴하게
구입하였으나  윈도우 10으로 설치를 다 해놓고 보니 컴퓨터를 너무 모르는 친구라서
복구 솔루션이 필요하다.  다른 타사 제품을 사용하는거보다 삼성이기때문에
 Samsung Recovery Solution 7의 Admin tool 을 이용하여 설치 진행을 해보자. Admin tool USB를
인식하기전에 매우 중요한작업은 다음과 같음.(Admin tool USB를 만드는 과정은 나중에 포스팅)


 

 OS Mode Selection 을 CSM and UEFI OS 나 UEFI OS로 변경


 
 Boot Device Priority 에 들어가서 Boot Option # 1 에 꼭 UEFI:USB 를 잡아야 모든게 정상적으로 된다. (USB 이미지는 꼭 UEFI GPT 파티션으로 만들어야한다)


 UEFI:USB 로 부팅을 하게되면 바로 Admin tool 메뉴가 나오고 위에 사진처럼 체크박스를
하고 Run 을 실행하면  파티션에 복구 데이터 파티션, 리커버리 모드(F4) 진입시
 Samsung Recovery Solution 7 메뉴 부팅가능하게 하는 파티션 생성 및 프로그램이 설치된다.
마지막으로 MBR fix 를 통해 셋팅을 모두 완료가 되었다.

이제 윈도우 10을 설치하는 과정이다.


윈도우의 ISO 이미지를 USB에 생성할때 꼭 GPT partition scheme for UEFI 로 생성해야한다.
만약 하지 않으면 파티션에 설치를 할 수 없다. 그 이유는 Samsung Recovery Solution 7
Admin Tool 에서 파티션 생성할 때 GPT 파티션으로 생성했기 때문이다. 어쨌든 이렇게
이미지를 USB에 넣고 다시 UEFI USB로 부팅하여 윈도우 10을 설치.
설치시 Recovery 라고 2개 생성된 파티션은 손대지말고 용량이 가장 큰 파티션에 설치
(윈도우 10 설치과정은 너무 간단하여 생략)

윈도우 10 설치가 완료되었으면 Samsung update(드라이버 업데이트 프로그램)을 통해 드라이버 및 필요한 응용프로그램을 모두 설치를 한다. 프로그램은 삼성 공식다운로드 페이지에서 모델명 검색하면 받을 수 있다. 뿐만 아니라 윈도우즈 업데이트도 모두 해둔다. 그리고 재부팅 후 F4 키를 계속 누르게 되면 삼성 리커버리 모드에 진입하게 된다.
 


리커버리 진입 후에 CTRL+ALT+F10 누르면 관리자패스워드를 입력하라고 나오는데
"secos"라고 입력하고 제일 위에 Command Promt를 선택하면 검은색 커맨드 창이 나오게된다.

X: 드라이브에서 X:\Recovery\Admin 폴더로 이동하여 AdminTool.exe 를 실행하게되면 다음 위에 사진과 같은 AdminTool 창이 뜨게 된다. 그리고 Capture Factory Image 에 체크하고 Wimboot 에 체크를 하고 RUN을 하게되면 공장 초기화 백업을 시작하게된다.


이렇게 시작이 되고~~ 약 5분에 10분 기다리자.


모든 작업이 끝나면 Backup management 에 Factory Image 라고 보인다 ! 야호! 이제 거의 다 끝나감. 자 이제 원래 윈도우로 돌아가 지저분하게 하고 다시 F4를 클릭하며 삼성 리커버리 모드에 진입하여 Factory Image 로 복구를 해보자!



Recovery 클릭 ! 옵션은 따로 선택하지말고 바로 실행.



짜짠...! 복구가 완료되면 Samsung Recovery 창이 하나 뜨면서 모든게 완료된다. 내 친구는 앞으로 컴퓨터 몰라도 쉽게 복구할수 있게 되었다.

2016년 10월 4일 화요일

Squid 프록시를 이용한 SSL 복호화.


System / Package Manager / Available Packages 탭에 들어가면 여러 패키지를 설치 할수 있다. 이 중 squid 를 검색하여 squid 를 install 로 한다.

/etc/ssl/openssl.cnf 중 수정해야할 부분만 표시하겠다

# $FreeBSD: src/crypto/openssl/apps/openssl.cnf,v 1.6 2004/03/17 17:44:38 nectar Exp $
#
# OpenSSL example configuration file.
# This is mostly being used for generation of certificate requests.
#
#
# This definition stops the following lines choking if HOME isn't
# defined.
HOME                    = .
RANDFILE                = $ENV::HOME/.rnd

# default SAN value if $ENV::SAN is not defined
#
SAN                     =

# Extra OBJECT IDENTIFIER info:
#oid_file               = $ENV::HOME/.oid
oid_section             = new_oids

# To use this configuration file with the "-extfile" option of the
# "openssl x509" utility, name here the section containing the
# X.509v3 extensions to use:
# extensions            =
# (Alternatively, use a configuration file that has only
# X.509v3 extensions in its main [= default] section.)

[ new_oids ]

# We can add new OIDs in here for use by 'ca' and 'req'.
# Add a simple OID like this:
# testoid1=1.2.3.4
# Or use config file substitution like this:
# testoid2=${testoid1}.5.6

####################################################################
[ ca ]
default_ca      = CA_default            # The default ca section

####################################################################
[ CA_default ]

dir             = ./demoCA              # Where everything is kept
certs           = $dir/certs            # Where the issued certs are kept
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
#unique_subject = no                    # Set to 'no' to allow creation of
                                        # several certificates with same subject.
new_certs_dir   = $dir/newcerts         # default place for new certs.

certificate     = $dir/cacert.pem       # The CA certificate
serial          = $dir/serial           # The current serial number
#crlnumber      = $dir/crlnumber        # the current crl number
                                        # must be commented out to leave a V1 CRL
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/private/cakey.pem# The private key
RANDFILE        = $dir/private/.rand    # private random number file

x509_extensions = usr_cert              # The extensions to add to the cert

# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt        = ca_default            # Subject Name options
cert_opt        = ca_default            # Certificate field options

# Extension copying option: use with caution.
# copy_extensions = copy

# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
crl_extensions        = crl_ext

default_days    = 365                   # how long to certify for
default_crl_days= 30                    # how long before next CRL
default_md      = md5                   # which md to use.
preserve        = no                    # keep passed DN ordering

# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy          = policy_match

# For the CA policy
[ policy_match ]
countryName             = match
stateOrProvinceName     = match
organizationName        = match
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

# For the 'anything' policy
# At this point in time, you must list all acceptable 'object'
# types.
[ policy_anything ]
countryName             = optional
stateOrProvinceName     = optional
localityName            = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

####################################################################
[ req ]
distinguished_name=req_distinguished_name
req_extensions = v3_req
prompt=yes          <==no 에서 yes 로 변경

default_bits            = 2048
default_keyfile         = privkey.pem
distinguished_name      = req_distinguished_name
attributes              = req_attributes
x509_extensions = v3_ca # The extensions to add to the self signed cert

# Passwords for private keys if not present they will be prompted for
#input_password=""
#output_password=""

# This sets a mask for permitted string types. There are several options.
# default: PrintableString, T61String, BMPString.
# pkix   : PrintableString, BMPString.
# utf8only: only UTF8Strings.
# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
# MASK:XXXX a literal mask value.
# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings
# so use this option with caution!
string_mask = nombstr

# req_extensions = v3_req # The extensions to add to a certificate request

[ req_distinguished_name ]
countryName                     = US
#countryName_default            = AU
#countryName_min                        = 2
#countryName_max                        = 2

stateOrProvinceName             = Somewhere
#stateOrProvinceName_default    = Somestate

localityName                    = Somecity

0.organizationName              = CompanyName
#0.organizationName_default     = SampleNameDefault

# we can do this but it is not needed normally :-)
#1.organizationName             = Second Organization Name (eg, company)
#1.organizationName_default     = World Wide Web Pty Ltd

organizationalUnitName          = Organizational Unit Name (eg, section)
#organizationalUnitName_default =

commonName                      = Common Name (eg, YOUR name)
#commonName_max                 = 64

emailAddress                    = Email Address
#emailAddress_max               = 64

# SET-ex3                       = SET extension number 3

[ req_attributes ]
challengePassword               = A challenge password
#challengePassword_min          = 4
#challengePassword_max          = 20

unstructuredName                = An optional company name

[ usr_cert ]

# These extensions are added when 'ca' signs a request.

# This goes against PKIX guidelines but some CAs do it and some software
# requires this to avoid interpreting an end user certificate as a CA.

basicConstraints=CA:FALSE

# Here are some examples of the usage of nsCertType. If it is omitted
# the certificate can be used for anything *except* object signing.

# This is OK for an SSL server.
# nsCertType                    = server

# For an object signing certificate this would be used.
# nsCertType = objsign

# For normal client use this is typical
# nsCertType = client, email

# and for everything including object signing:
# nsCertType = client, email, objsign

# This is typical in keyUsage for a client certificate.
keyUsage = nonRepudiation, digitalSignature, keyEncipherment

# This will be displayed in Netscape's comment listbox.
nsComment                       = "OpenSSL Generated User Certificate"

# PKIX recommendations harmless if included in all certificates.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
extendedKeyUsage=clientAuth

# This stuff is for subjectAltName and issuerAltname.
# Import the email address.
# subjectAltName=email:copy
# An alternative to produce certificates that aren't
# deprecated according to PKIX.
# subjectAltName=email:move

# Copy subject details
# issuerAltName=issuer:copy

#nsCaRevocationUrl              = http://www.domain.dom/ca-crl.pem
#nsBaseUrl
#nsRevocationUrl
#nsRenewalUrl
#nsCaPolicyUrl
#nsSslServerName

[ usr_cert_san ]

# copy of [ usr_cert ] plus nonempty Subject Alternative Names
basicConstraints=CA:FALSE
nsComment                       = "OpenSSL Generated User Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
extendedKeyUsage=clientAuth
subjectAltName=$ENV::SAN

[ server ]

# Make a cert with nsCertType=server
basicConstraints=CA:FALSE
nsCertType = server
nsComment = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
extendedKeyUsage=serverAuth,1.3.6.1.5.5.8.2.2
keyUsage = digitalSignature, keyEncipherment

[ server_san ]

# copy of [ server ] plus nonempty Subject Alternative Names
basicConstraints=CA:FALSE
nsCertType = server
nsComment = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
extendedKeyUsage=serverAuth,1.3.6.1.5.5.8.2.2
keyUsage = digitalSignature, keyEncipherment
subjectAltName=$ENV::SAN

[ v3_req ]

# Extensions to add to a certificate request

basicConstraints = CA:TRUE             <==FALSE 에서 TRUE 변경
keyUsage = nonRepudiation, digitalSignature, keyEncipherment

[ v3_ca ]


# Extensions for a typical CA


# PKIX recommendation.

subjectKeyIdentifier=hash

authorityKeyIdentifier=keyid:always,issuer:always

# This is what PKIX recommends but some broken software chokes on critical
# extensions.
#basicConstraints = critical,CA:true
# So we do this instead.
basicConstraints = CA:true

# Key usage: this is typical for a CA certificate.
keyUsage = cRLSign, keyCertSign

# Some might want this also
# nsCertType = sslCA, emailCA

# Include email address in subject alt name: another PKIX recommendation
# subjectAltName=email:copy
# Copy issuer details
# issuerAltName=issuer:copy

# DER hex encoding of an extension: beware experts only!
# obj=DER:02:03
# Where 'obj' is a standard or added object
# You can even override a supported extension:
# basicConstraints= critical, DER:30:03:01:01:FF

[ v3_ca_san ]

# copy of [ v3_ca ] plus nonempty Subject Alternative Names
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
basicConstraints = CA:true
subjectAltName=$ENV::SAN

[ crl_ext ]

# CRL extensions.
# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.

# issuerAltName=issuer:copy
authorityKeyIdentifier=keyid:always,issuer:always

여기까지 변경이 완료되었으면 인증서를 만들어보도록하자.


openssl genrsa -out private.key 2048
openssl req -x509 -new -nodes -key private.key -sha256 -days 365 -out CA.pem


이렇게 개인키와 공개키를 만들었으면 winscp 를 통해 파일을 윈도우에 저장을 하도록하자.
위에 명령어를 통해 생성된 키값이다.


Pfsense 관리자 페이지에 접속하여 System / Certificate Manager / CAs / Add 를 선택하면
다음과 같은 페이지가 나온다. Import an existing Certificate Authority 를 선택하고
Certificate data 안에는 CA.pem 정보값을 워드패드로 열어 붙여넣기를 하고 Certificate Private Key 는 private.key 파일 안에 있는 정보를 붙여넣기하고 Save를 한다.

저장을 하게되면 다음과 같이 생성이 완료된것을 확인할 수 있다.
마지막으로 오른쪽에 보면 Actions 메뉴 중 Export CA가 있다. Export하여 인증서를 가지고 있도록하자.

이렇게 완료되었다면 이제 위에서 설치한 Squid 프록시 설정 부분에 가보도록하자.
Services / Squid Proxy Server  항목에 가면 아래에 관련된 옵션을 모두 체크한다.


Note: If unchecked, ALL Squid services will be disabled and stopped.

Note: Transparent mode will filter SSL (port 443) if you enable man-in-the-middle options below.
In order to proxy both HTTP and HTTPS protocols without intercepting SSL connections, configure WPAD/PAC options on your DNS/DHCP servers



그리곤 위에서 Export 한 인증서를 신뢰할 수 있는 루트 인증 기관으로 선택하여 설치해준다. 

설치를 하고 들어가면 아까 생성한 인증서가 보이고 https 접속시 나오는 SSL 관련 페이지도 뜨지 않게된다.

이제 준비가 모두 완료되었다. 와이어샤크를 이용하여 SSL 통신을 볼수 있도록 해보자.




















vmware 에 설치된 PC는 squid 프록시를 통해서 인터넷을 사용하는 사용자라고 생각하면
된다. 구글에서 비밀번호를 대충치고 난 뒤의 와이어샤크 결과를 보도록하자.













보다시피 모두 암호화되어 있어서 아무것도 볼수가 없다. 개인키를 이용하여 복호화를 해보도록하자. Wireshark 메뉴중 Edit -> Preferences -> Protocols -> SSL 에 들어가면 다음과 같은 화면이 나오고 Edit 를 선택한다.

















그리고 SSL 443포트 프로토콜은 http 로 해주고 확인을 하면 !

암호화 되어 있는 패킷들이 모두 복호화되어 있다. 패스워드는 임의로 막 입력한 값이므로
접속시도도 하지마라. 추가적인 설명은 나중에 포스팅.

pfsense 서버 설치 #1

pfsense 는 패키지 형태로 나온 오픈소스의 방화벽 솔루션이다.
방화벽 이 외에도 프록시 서버, DNS, NTP 등 많은 서버들을 간단하게 업데이트를 통해 운영할수 있는 매우 좋은 솔루션이라고 생각한다.
설치부터 운영 방법까지 포스팅할 예정이다.

Open Source Security

Secure networks start here.™



1. https://pfsense.org/download  페이지에서 ISO 이미지를 받을 수 있으며, 본인이 편한 플랫폼으로 다운받는다. 아키텍쳐는 32비트나, 64비트 아무거나 받도록하자. 필자는 VMWARE에 설치하여 운영하기 위해서 ISO로 다운받았다.

2. ISO 이미지를 넣고 부팅을 해보면 다음과 같이 화면에 나온다

 화면이 나오면 엔터로 들어가면된다. 2번은 싱글모드 부팅으로 나중에 패스워드를 까먹었거나 할때 싱글모드로 부팅하여 찾을수 있을 것이다. 이 외에 옵션은 딱히 손댈 필요는 없다.

본인이 Custom Install 로 하고싶다면 하면된다. 하드포맷이나 마운트 위치등 설정할수 있는 부분이니 필요할때는 Custom Install 하고 디폴트로 사용하고자 하면 Quick/Easy Install 로 설치하면 된다.


이 후에 나오는 항목들은 모두 엔터로 넘어가자 특별한 내용은 없다.


설치가 1분안에 모두 완료되고 다음과 같이 재부팅 하라는 메세지가 나온다. 그리고 재부팅
하면 설치는 완료가 된다.  재부팅하기 전에 생각을 해봐야하는 부분이 있다 방화벽을 어떻게 운영 할지를 생각해보아야한다. Vmware 에는 디폴트로 랜카드가 하나만 잡혀 있기 때문에 랜 카드를 추가해주어야 정상적으로 방화벽으로 동작할 것이다. 
필자는 인터넷 -> 공유기 -> 필자PC <-> 방화벽 -> vmware 윈도우 7 으로 구성할 예정이다. 즉 방화벽에 적용되는 사용자는 vmware 에 설치된 윈도우 7 사용자가 될 것이다. 
<->
필자가 원하는 구성도를 보면 필자PC와 방화벽은 같은 서브넷에 있어야하며 vmware 윈도우 7 사용자는 방화벽 밑단에 있거나 브릿지를 이용해야하지만 가상에서 브릿지로 구성하면 이리저리 복잡하니 방화벽 밑에 nat 로 설정하여 사용하겠다. 


설치가 완료되고 최초로 부팅을 하게되면 다음과 같이 설정하는 화면이 나온다. 위에 빨간
네모칸안에 랜카드가 2개 잡혀 있는 것이 보일 것이다. 그리고 VLAN은 사용하지 않을 예정이니 n 으로 하자.

랜카드가 두개 잡혀 있고 le0 을 WAN구간 le1 을 LAN 구간으로 설정한다. 이 부분은 개인 설정마다 다 다르니 잘 확인하고 구분을 하도록하자. 다 완료되었으면 y 를 누르고 다음으로 간다.

설정이 모두 완료되면 위에 사진처럼 나온다. WAN 구간에는 공유기로부터 받은 192.168.10.15 대역으로 설정이 되어 있고 LAN구간에는 192.168.1.1/24 로 디폴트로 들어가게 되어 있다. 필요하면 본인이 바꿔서 설정해야한다. IP설정은 2번 메뉴에서 가능하다. 
IP설정이 모두 완료되었으면 웹브라우져를 통해 접속을 해보자.


192.168.1.1 으로 접속하면 다음과 같은 페이지가 나온다. 그리고 디폴트 계정
admin
pfsense 
입력하고 접속하면 서버 도메인이나 이메일등 입력하라는 메뉴가 나오고 저장하면 



다음과 같이 메뉴가 나온다. 이로서 설치 부분은 모두 완료되었다.
 참고사항으로 192.168.10.15 은 WAN구간 IP 주소로 접속이 되지 않는다. 왜냐면 방화벽 디폴트로 막기 때문이다. RFC4193 에  사설대역 및 루프백 대역을 차단하라고 권고되어 있기 때문에 막혀 있다. 일반적으로 WAN에서 접속하여 방화벽을 관리하지는 않는다. 필자는 VMWARE 사용으로 WAN에서도 접속가능하게 해두었지만 실제 운영하는사람은 접속되게 해서는 안될 것이다.
Interface 메뉴의 WAN 에 가면 Block private networks and loopback addresses
해당 부분이 체크되어 있는것을 풀면 정상적으로 접속될것이다.