우버 해킹 (2017)

Security 2018. 2. 2. 10:13



우버에서는 내부 깃허브 싸이트를 운영하고 있었다. 해커는 소스에서 우버 AWS 계정(아마도 공통 계정?)을 얻은 후, 

AWS 계정으로 들어가 개인정보를 털었다고 한다. 



http://www.boannews.com/media/view.asp?idx=58202&page=1&kind=1



우버의 발표에 의하면 공격자들은 우버 소프트웨어 엔지니어들끼라만 사용하던 사설 깃허브 코딩 사이트에 접근하는 데에 성공했다. 그리고 거기서 우버의 AWS 계정 크리덴셜을 찾아냈다. 우버는 각종 컴퓨터 관련 일들을 관리하고 해결하기 위해 이러한 플랫폼들을 사용, 유지하고 있었다. 그리고 이 계정에는 고객과 기사들의 개인정보가 같이 저장되어 있었다.

Posted by '김용환'
,



보안업체Imperva사는 2010년 12월부터 2011년 5월까지 조사해봤더니. 매 2분마다 공격이 들어오고 있다고 합니다. 아무래도 미국회사이다 보니, 웹 공격을 하는  나라는 대 부분이 미국이었다고 합니다. 그리고, 다음이 중국을 차지했고, 네델란드 순이었습니다. 

제가 운영해보니, 한국에서 들어오는 대부분의 공격은 중국 IP더군요~^^


'봇'에 의해서 공격이 일어나는데, 짧은 시간내에 대량의 공격의 이루어지는 패턴이었다고 합니다. 잘알려진 취약성을 테스트해서 어플리케이션의 보안을 깨는데 그 목표가 있었습니다.


공격 패턴을 조사해보니, 총 4가지의 패턴이 있었습니다.

Imperva_UnFab4.jpg



첫번째로 많은 패턴이 37%인 directory traversal 입니다. 취약점을 찾을 수 있는 패턴을 찾는 것이지요. 대 부분이 공격 전에 scanning을 한다고 하는데요. 이부분에 대해서 취약성을 최대한 보이지 않도록 방어하는 것이 중요합니다. 자바 웹 서버의 경우는 웹 서버의 버전을 보여주지 않거나 DB 혹은 사용자 내부 정보를 보이지 않도록 해야 합니다.


관련해서 문서를 잘 정리하고, 인수인계자에게 문서를 만들어주는 것이 좋다.
(나는 3년 간의 운영정보를 가지고 사내에 표준 문서를 만들었다.)

그다음으로 많은 것이 36%인 XSS 공격입니다. XSS공격은 서버가 사용자 파라미터를 체크하지 않는 것을 근거로 악의적인 사용자가 사용자 파라미터에 악성 스크립트 코드를 전송하게 해서 코드의 결과를 웹 브라우저로 보게 하는 것입니다.


네이버 개발자 센터는 자바기반의 Lucy-XSS 필터를 제공하여 XSS 코드의 위험으로부터 보호하고 있습니다.

http://dev.naver.com/projects/lucy-xss


Sql Inject (SQLI) 은 23%를 차지하고 있습니다. 

아파치 모듈인 mod_security를 통해서 방어할 수 있지만, 사용자 파라미터에 비슷한 내용이 있다면 쓰기 어렵습니다.

따라서, 웹 개발자가 잘 판단하면서 사용자 파라미터를 신뢰하지 않으면서 잘 코딩할 필요가 있습니다.  PrepareStatment를 잘 사용하여 SQL Injection공격을 잘 방어 할 수 있습니다.


그리고, RFI 방식은 remote file inclusion 의 줄임말로 공격자가 악의적인 코드를 실제 서버에 전달합니다. 그 서버를 통해서 악성코드를 실행하게 하는 형식입니다. 

이와는 달리 LFI 방식이 있는데요. 이것은 웹 서버가 파일을 보여주는 웹 콜에 대해서 /etc/passwd를 보이가 한다거나 특정 명령어를 실행할 수 있게 해서 정보를 파악하는 것을 말합니다.




운영을 하면서 많이 공격이 왔던 것은 SQL Injection과 XSS 공격이었던 것 같다. 에러 로그와 아파치 로그/톰캣 로그를 잘 분석하면서 어떤 공격이 오고 있는지 잘 분석할 필요가 있다. 필요하면 ip block, reference block, mod_security를 이용해서 패턴에 맞는 공격을 방어한다면 웹 서버는 더욱 더 튼튼하게 될 것이다. 





출처 :

1. 매 2분 공격

http://www.readwriteweb.com/archives/report_web_applications_attacked_every_2_minutes.php?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+readwriteweb+%28ReadWriteWeb%29


2. RFI 공격

http://thexs4.tistory.com/455


3. XSS 공격

http://www.hanbitbook.co.kr/web/sample/1331/sample_chap5.pdf


4. LUCY-XSS 

http://dev.naver.com/projects/lucy-xss


5. SQL injection

http://8220.tistory.com/1166334277

6. RFI
http://blog.naver.com/PostView.nhn?blogId=cyber794&logNo=120072757299&redirect=Dlog&widgetTypeCall=true

'Security' 카테고리의 다른 글

우버 해킹 (2017)  (0) 2018.02.02
도스 공격에 대한 방어를 위한 Kernel 셋팅  (0) 2009.07.27
코드 소프트 해킹 이벤트 관련  (0) 2009.03.19
사설 내부 IP 대역  (0) 2008.08.28
x.509 certificate 보기  (0) 2006.03.03
Posted by '김용환'
,

http://blog.pages.kr/4
http://ask.nate.com/knowhow/view.html?num=123581

중요 내용
net.ipv4.icmp_echo_ignore_broadcasts
net.ipv4.conf.all.accept_source_route
net.ipv4.tcp_syncookies
net.ipv4.conf.all.accept_redirect
net.ipv4.icmp_ignore_bogus_error_responses
net.ipv4.conf.all.rp_filter
net.ipv4.conf.all.log_martians

'Security' 카테고리의 다른 글

우버 해킹 (2017)  (0) 2018.02.02
웹 보안 공격 / 2분에 한번씩 공격 / 공격 패턴  (0) 2011.07.27
코드 소프트 해킹 이벤트 관련  (0) 2009.03.19
사설 내부 IP 대역  (0) 2008.08.28
x.509 certificate 보기  (0) 2006.03.03
Posted by '김용환'
,

코드 소프트 해킹 이벤트 사건

 

 

http://www.playxp.com/community/funny/view.php?article_id=1796218

 

최근에 코드 소프트에서 특허를 낸 알고리즘과 구현에 대해서 천만원 해킹 이벤트를 개최했다고 하는데 이를 2시간만에 깼던 분의 글을 보았다.

 

우선 축하드리고 싶다. 멋있다!!


 

 

MaskEncryption방법은 대칭키 암호화 알고리즘을 쓰고 있는데, 이를 한자씩 대응하다. 따라서, 모든 1byte는 1byte ascii 로 매핑하니. 표현하는 범위는 이미 정해져있으니. 그냥 쫙 brute attack처럼 계속 대입하면 된다.

 

생각해보건데, 성공하신 분이 대입, 사람의 패턴 분석(즉, 문장구조..헉!!) 을 이해하고, 있다는 것이다.

그래서 이런 확산방법을 통해서 단순히 1:1의 문자 암호화 방법으로는 문제가 있다는 것을 파악했다.

 

대칭 암호화 알고리즘의 단점, 확산 효과가 없는 암호화 알고리즘은 확실히 문제를 일으킬 수 있다는 사실을 깨닫게 해준 사건이 아닐까 싶다~

 

Posted by '김용환'
,

사설 내부 IP 대역

Security 2008. 8. 28. 20:51
10.0.0.0 - 10.255.255.255 (10/8 prefix)
172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
192.168.0.0 - 192.168.255.255 (192.168/16 prefix)
Posted by '김용환'
,

 

- 개인 키 보기

openssl x509 -inform der -in TestRSACertValid.cert -text

 

- 공인 인증키 보기

openssl x509 -inform pem -in TestRSACertValid.pem -text

 

 

Posted by '김용환'
,

http://testbed.gridcenter.or.kr/kor/technical_doc/globus/openssl_ca_usage.html

 

 

OpenSSL(SSLeay) Simple CA Usage

작성자: 김상완(sangwan@kisti.re.kr) 날짜: 2002-04-09 이 문서는 OpenSSL (또는 SSLeay) 패키지에 들어 있는 인증서 발급 및 관리 기능을 사용하는 방법을 설명한다. 목차 1. 최초의 CA를 만들기 2. CA인증서를 globus 인증서 디렉토리에 추가하기 3. 인증요청서에 서명하기 OpenSSL은 Eric Young 이라는 사람이 만든 SSLeay 라이브러리를 공개소스화 한 것으로써, 그 기능이나 구성에서 SSLeay와 거의 차이점이 없다. 2002년 4월 현재 OpenSSL 최신버젼은 0.9.6이다. OpenSSL(SSLeay)은 SSL(Secure Socket Layer)을 사용하는데 필요한 기능을 구현해 놓은 라이브러리이면서 동시에 그 라이브러리의 기능을 이용할 수 있는 컴맨드라인 명령어를 제공한다. OpenSSL의 컴맨드라인 명령어의 이름은 openssl이고, SSLeay의 경우는 ssleay이다. 이 문서에서는 편의상 OpenSSL 로 통일하여 사용하도록 한다. OpenSSL을 일반적인 소스 컴파일 과정에 의해 설치하면, 설치 디렉토리아래에 CA.sh 라는 스크립트가 존재하는데, 이것은 가장 간단한 CA(Certificate Authority) 의 기능을 수행할 수 있도록 해 주는 간단한 쉘 스크립트이다. 스크립트 내에서 openssl의 여러 가지 기능이 호출되어 사용된다. 따라서, openssl이 현재 쉘의 PATH 환경변수에 등록이 되어 있어야 한다. 1. 최초의 CA를 만들기 [[목차]] CA 기능을 사용하기 위해서는 최상위 CA를 만들어야 한다. 임의의 작업 디렉토리로 이동한다. # cd /path/to/any_temporatory_directory 또는 홈디렉토리에 CA라는 디렉토리를 만들어 사용한다. # cd ~ ; mkdir CA ; cd CA 설치 디렉토리의 openssl.cnf 화일이 환경 설정을 위한 목적으로 사용된다. 인증서 Subject 의 DN(Distinguished Name)을 정의 하는 부분도 포함되어 있다. # vi /usr/local/openssl/lib/openssl.cnf 새로운 CA를 만들려면 CA.sh 스크립트를 -newca 옵션을 주어 실행한다. # sh /usr/local/ssl/bin/CA.sh -newca CA certificate filename (or enter to create) ;(Press Enter to use default value) Making CA certificate ... ; openssl is called here as follow from CA.sh ; openssl req -new -x509 -keyout ./demoCA/private/./cakey.pem \ ; -out ./demoCA/./cacert.pem -days 365 Using configuration from /usr/local/ssl/lib/ssleay.cnf Generating a 1024 bit RSA private key ........++++++ ......................++++++ writing new private key to './demoCA/private/./cakey.pem' Enter PEM pass phrase: ; CA 비밀번호 Verifying password - Enter PEM pass phrase: ; CA 비밀번호 ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- ; CA's Information Country Name (2 letter code) [AU]:KR State or Province Name (full name) [Some-State]:STATE ;(null in Globus, enter '.') Locality Name (eg, city) []:LOC_NAME ;(null in Globus, enter '.') Organization Name (eg, company) [Internet Widgits Pty Ltd]:ORG_NAME ;(Globus) Organizational Unit Name (eg, section) []:OU ;(null in Globus, enter '.') Common Name (eg, YOUR name) []:CA_NAME ;(enter the CA's name) Email Address []:WHO@WHERE ;(null in Globus, enter '.') # openssl.cnf 화일에서 [req_distinguished_name] 부분에 DN을 구성할 정보들에 대한 설정을 할 수 있다. 프롬프트, 기본값, 최소, 최대값등으 설정할 수 있다. 자세한 것은 openssl.cnf 화일을 참조하기 바람. 이상 실행결과 CA의 키와 인증서가 생성된다. 현재 디렉토리에 demoCA라는 디렉토리가 만들어지고, 이 디렉토리 아래에 화일이 생성되어 있을 것이다. CA의 키화일은 demoCA/private/cakey.pem이고, CA의 인증서 화일은 demoCA/cacert.pem 이다. CA의 키 화일은 다른 사람이 볼 수 없도록 위 과정에서 입력한 비밀번호로 암호화 되어 있는데, cakey.pem 화일에서 -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,0F72CE690870F16D 부분이 키를 암호화 하는데 사용된 암호화 알고리즘에 대한 정보를 나타낸다. CA.sh -newca 명령은 내부적으로 다음과 같은 openssl 명령이 호출되어 수행되는데, # openssl req -new -x509 -keyout ./demoCA/private/cakey.pem \ -out ./demoCA/cacert.pem -days 365 openssl은 컴맨드라인 명령어이고, 'req'는 X.509 형식의 인증 요청서(Certificate Signing Request)를 관리하기 위한 openssl의 내부 명령어이다. CA 인증서는 CA 자기 자신의 인증요청서에 자신이 스스로 서명한 것이다. CA 인증서의 내용을 확인하려면, openssl x509 명령을 이용한다. -in 옵션 다음에 인증서화일의 화일명을 써 주면 된다. 다음에서 확인할 수 있듯이 Issuer와 Subject가 동일함을 알 수 있다. # ssleay x509 -in demoCA/cacert.pem -text Certificate: Data: Version: 1 (0x0) Serial Number: 0 (0x0) Signature Algorithm: md5WithRSAEncryption Issuer: C=KR, ST=STATE, L=LOC_NAME, O=ORG_NAME, OU=OU, CN=CA_NAME/Email= WHO@WHERE Validity Not Before: Feb 1 09:51:55 2002 GMT Not After : Feb 1 09:51:55 2003 GMT Subject: C=KR, ST=STATE, L=LOC_NAME, O=ORG_NAME, OU=OU, CN=CA_NAME/Email =WHO@WHERE Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d4:6d:06:e6:c8:35:04:45:b1:97:c3:23:98:21: ... 28:5c:b2:e6:27:89:5b:11:a3 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption 70:d4:29:d8:45:e2:7c:ac:61:46:2c:37:41:08:a1:64:ab:96: ... -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- # 2. CA인증서를 globus 인증서 디렉토리에 추가하기 [[목차]] CA인증서를 globus에 추가시키는 방법은 globus.org 의 다음 링크에 설명이 자세히 나와있으니 참조하기 바람. http://www.globus.org/Security/v1.1/adding_trusted_ca.html CA의 인증서는 CA의 공개키에 대한 정보를 포함하고 있으며, 아무에게나 공개될 수 있는 정보이다. demoCA 디렉토리아래의 cacert.pem 화일이 CA의 인증서 화일이다. 만일 자체적으로 CA를 운영한다면 이 화일을 여러 사람이 볼 수 있는 공개된 장소에 두어야 한다. 자체적으로 CA를 운영하지는 않지만, 다른 CA를 globus에 설치하려고 하는 경우는 CA로 부터 CA자신의 인증서를 얻어 와야 한다. 이렇게 얻어온 CA의 인증서를 cacert.pem 이라는 화일로 저장하자. 먼저 cacert.pem 화일의 해쉬(hash)값을 얻는다. # ssleay x509 -in demoCA/cacert.pem -hash -noout 4305cfde ; 이것이 해쉬 값이다. cacert.pem 화일을 /etc/globus/share/certificates/hash_value.0 화일로 복사한다. /opt/globus 는 globus deploy 경로이다. # cp cacert.pem /opt/globus/share/certificates/(hash_value).0 다음 ca-signing-policy.conf 화일을 편집한다. # vi /opt/globus/share/certificates/ca-signing-policy.conf #------------------------------------------------------------------------ # token type | def.authority | value #--------------|---------------|----------------------------------------- # EACL entry #1| access_id_CA X509 '/C=US/O=Globus/CN=Globus Certification Authority' pos_rights globus CA:sign cond_subjects globus '"/C=US/O=Globus/*" "/O=Grid/O=Globus/*"' # EACL entry #2| access_id_CA X509 '/C=KR/O=Globus/CN=KISTI Supercomputing Center CA' pos_rights globus CA:sign cond_subjects globus '"/C=KR/O=Globus/*" "/O=Grid/O=Globus/*"' # end of EACL 위에서 새로 추가된 부분이 강조되어 표시되었다. 그리고 밑줄친 부분은 방금 가져온 CA인증서의 Subject에 해당된다. 인증서의 Subject 명을 확인하려면 다음 명령을 사용한다. # openssl x509 -in hash_value.0 -text -noout 위의 강조된 부분에서 세번째 cond_subjects 로 시작하는 줄은 이 CA가 서명 할 수 있는 Subject들을 나타낸다. '/C=KR/O=Globus/' 또는 '/O=Grid/O=Globus/'로 시작되는 모든(*, 와일드 카드 문자) Subject에 대해서 '/C=KR/O=Globus/CN=KISTI Supercomputing Center CA' 라는 CA가 서명할 수 있음을 나타낸다. 만일 이 조건을 만족하지 않는 Subject를 가진 인증서에 이 CA가 발행(또는 서명)한 것으로 표시되어 있다면, 위의 규칙을 위반한 것이므로, 정상적인 인증서로 취급되지 않는다. 3. 인증요청서에 서명하기 [[목차]] 단계 1에서 demoCA 디렉토리가 있는 곳으로 이동한다. # cd /path/to/any_temporatory_directory 인증 요청서 부분을 newreq.pem 이라는 화일로 저장한다. # more newreq.pem -----BEGIN CERTIFICATE REQUEST----- MIIBhzCB8QIBADBIMQ0wCwYDVQQKEwRHcmlkMQ8wDQYDVQQKEwZHbG9idXMxFTAT BgNVBAsTDGhwY25ldC5uZS5rcjEPMA0GA1UEAxMGTXlVc2VyMIGfMA0GCSqGSIb3 ...(중략)... OXwjpooNitFPcg2o1TG7PHaJpy0fMmVe4m5gWhmH+fXIaBa2F2sqo5Drlw7voL/5 hLYPAWps6pwek9E= -----END CERTIFICATE REQUEST----- CA.sh 에 -sign 옵션을 주어 실행한다. # sh /usr/local/ssl/bin/CA.sh -sign Using configuration from /usr/local/ssl/lib/ssleay.cnf Enter PEM pass phrase: Check that the request matches the signature Signature ok The Subjects Distinguished Name is as follows organizationName :PRINTABLE:'Grid' organizationName :PRINTABLE:'Globus' commonName :PRINTABLE:'cluster.hpcnet.ne.kr' Certificate is to be certified until Sep 24 11:09:03 2002 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated issuer :/C=KR/O=Globus/CN=My Certificate Authority subject:/O=Grid/O=Globus/CN=cluster.hpcnet.ne.kr ... -----BEGIN CERTIFICATE----- MIICXzCCAcigAwIBAgIBATANBgkqhkiG9w0BAQQFADBBMQswCQYDVQQGEwJLUjEP ... ziZoNMbnBCl78hEo4Ph3VNoLPXosYIa9a6dv6+6ihgs9YYc= -----END CERTIFICATE----- 위에서 출력되는 것은 다음과 같다. 환경설정으로 이용되는 화일이 어떤 것인지 출력된다. 서명할 인증 요청서의 Subject 내용이 표시된다. CA를 생설할 때 입력하였던 암호를 입력하고 서명하겠느냐고 물어보는 질문에 yes를 해주면, 인증요청서에 대한 인증서가 만들어 진다. 만들어진 인증서는 현재 디렉토리의 newcert.pem이라는 화일로 저장된다. 만일 newcert.pem 이라는 화일이 이미 존재 한다면 내용을 덮어쓰게 된다. 자체적으로 CA를 운영하는 경우에는 이 인증서를 인증을 요청한 사람에게 전달하여 주면 된다.
Posted by '김용환'
,

X.509의 프로토콜 구조 및 동작 연구

 

- 서론

- PKI의 구성요소

- PKI 기본구조의 구성 요소 및 상호 기능

- PKI 프로토콜의 구격

- X.509 PKI Topology Structure

- X.509 인증서 발급 절차

- 인증서 취소 목록

- 참고문헌

Posted by '김용환'
,