posted by 갱우덩 2021. 5. 13. 20:15

Visual Studio 2010 으로 빌드Openssl Library 1.1.1k Static Library

 

분할 압축해서 올립니다.

 

OpenSSL-1.1.1k-VS2010-SL.z01
10.00MB
OpenSSL-1.1.1k-VS2010-SL.z02
10.00MB
OpenSSL-1.1.1k-VS2010-SL.zip
0.74MB

 

맘대로 사용하시면 됩니다. 이상하면 알려주세요. Build만 하고 저도 안써봤어요~ 

 

여러가지 이유로 Visual Studio 2010 을 아직 사용중인데, Shared Library 필요하시면 댓글 다시면

 

Build 해서 올립니다. 뭐~ 걍 Build 하는 방법 검색해서 하셔도 되겠지만~ ㅎㅎ~

posted by 갱우덩 2020. 1. 21. 23:33

themida

 

이번 글에서는 기능 설명이 길어서 스압이 있을 수 있습니다.~ 감안하며 읽어주세요.^^

 

주로 번역(80%) & 직접사용(20%) 을 기준으로 작성한 글입니다.

 

option 설정에 따라 themida packing된 파일이 실행되는 속도와 파일크기가 변한다. 

 

때문에 필요없는 보안 option은 제거하면 된다.

 

Anti-Debugger Detection : 

 

debuger로 이 파일을 debuging하려고 하면 이를 감지한다. "Ultra"설정은 바이러스 감염이나 Rootkit이

 

설치된 시스템에서 실행되지 않을 수 있으며, 비 Windows 플랫폼 (예 : Wine, ReactOS)과 호환되지 않을

 

수도 있습니다.


※ Wine : Linux OS에서 윈도우용 Win32 Lib / exe 를 실행시켜주는 application, 또다른 에뮬레이터를

 

             필요하지 않음

 


ReactOS : 마이크로소프트 윈도우 운영체제를 오픈소스로 구현중인 React OS(https://www.reactos.org/,  

 

https://www.reactos.org/download)  


 rootkit : 자신을 숨기는 SW, 악성SW로 주로 분류됨

 

Anti Dumpers : 

 

해당 파일이 메모리에서 암호화되지 않은 data와 code로 동작할때, 이 메모리의 내용을 파일로 저장해 

 

원본 image를 그대로 재구성하는 많은 Tool들을 피할 수 있도록 해준다. 

 

메모리 조작이 일어날때, 감지할 수 있는 기능

 

EntryPoint Obfuscation : 

 

응용 프로그램 시작 지점을 혼합합니다. 공격자가 프로그램의 시작지점을 얻을 수 없도록 해서 공격하기 

 

어렵게 합니다. 프로그램의 시작지점에 쓰레기 코드를 넣고 원래 시작지점에 있는 코드 내용을 

 

SecureEngine® 에 통합합니다.

 

Resources Encryption : 

 

해당 파일의 리소스 부분을 암호화함. 응용 프로그램에서 사용하는 중요한 구조를 모니터하거나 

 

변경할 수 없도록합니다.

 

VMWare / Virtual PC : 

 

Vmware, Virtual PC 같은 가상PC에서도 실행될수 있도록 합니다.

 

Advance API-Wrapping : 

 

해당 프로그램이 사용하는 Api들을 확인할 수 없도록 합니다. 난독화레벨을 지정할 수 있으며, 

 

레벨이 높을 수록 프로그램에서 사용하는 Api들을 난독화하기 위한 cpu 처리시간이 늘어납니다. 

 

프로그램이 실행되는 시간이 오래걸릴수 있습니다. 프로그램이 빨리 실행되기를 원한다면,

 

api level을 낮추자!

 

Anti-Patching : 

 

 none : 더미다를 적용한 파일이 변경되어도 신경안씀


 File Patch : themida 가 적용된 파일이 변경되면, 해당 파일 실행되지 못하도록 막는다.


 File Patch(sign support) : 파일에 인증서 Sign 적용하는 것만 허용되고, 나머지는 File Patch와

 

   동일하게 동작


***. 사용중인 themida에서는 어떤 설정을 하든 인증서 적용 가능. 파일변경해도 실행가능하고... 

 

      themida Bug인가?

 

Taggant Information : 

 

바이러스 백신 오 탐지에 맞서기 위해 소프트웨어에 추가 된 암호화 서명입니다. Taggant 정보에는 

 

e-mail과 보호된 바이너리 정보가 포함됩니다. 파일이 신뢰할 수 있는 고객에 의해 보호되고 있음을 

 

나타냅니다. 백신들에게  이 packing이 themida에 의해서 된것이 확실하니 오탐하지 말라는 

 

정보입니다. 하지만, 이 라이선스 정보가 누출되어 바이러스를 보호하는데 사용되면, 백신 회사가 

 

Taggant 서명을 블랙리스트에 올리며 해당 라이센스로 보호 된 모든 항목은 

 

바이러스 / 악성 프로그램으로 표시됩니다.

 

memoryguard : 

 

해커가 해당파일의 메모리를 변경할 수 없도록하는 기능입니다.

 

Compression : 

 

themida를 적용하게 되면 프로그램 파일의 크기가 일반적으로 증가하게 됩니다. 압축을 함으로써 파일크기 

 

증가를 일부 줄일 수 있습니다. Application / Resource / SecureEngine 은 압축을 할 영역을

 


나타냅니다. 빠르게 압축을 해제할 수 있는 알고리즘을 사용하므로 메모리에 올려지는 속도에는 

 

영향을 거의 주지 않습니다.

 

Application : themida를 적용할 해당 파일의 코드영역


Resource : themida를 적용할 해당 파일의 리소스영역


SecureEngine : themida 기능 관련 영역

 

Monitor Blockers : 

 

프로그램이 접근하는 파일, 레지스트리키 정보를 해커가 알수 없도록 숨깁니다. 공격자가 

 

어떤 Tool을 사용하든 상관없이 당신이 만든 프로그램이 접근하는 파일, 레지스트리 를 

 

찾아내지 못할 겁니다.

 

Process monitor를 실행시켜보니 다음과 같은 메시지와 함께 종료가 됩니다. 해당 기능을 체크하지

 

않으면 우리프로그램이 접근하는 파일, 레지스트리 관련 정보를 processmonitor를 통해서 확인이 가능합니다.

 

응용프로그램의 무료사용기간 정보를 파일, 레지스트리에 기록한 것을 찾아내는데 사용될 수 있습니다. 

 

이런, 모니터링 Tool을 찾아내는 기술은 전에 없던 매우 강력한 기능입니다.

 

대부분의 현재 protector 들은 시스템에 등록된 window class 이름을 찾거나 메모리상에 실행중인 것으로

 

파악하는 방식인데 이런 방식은 공격자들이 쉽게 우회할 수 있는 방식입니다.

 

 

Delphi/BCB form protection : 

 

델파이나 볼렌드 C++로 제작된 프로그램이라면, 이 옵션을 통해서 FORM을 보호할 수 있습니다.

 

프로그램이 실행될 때, Delphi/BCB FORM 들을 추출하지 못하도록 막아줍니다.

 

When Debugger Found :

 

themida 가 적용된 프로그램이 실행중일때, 메모리상에 debugger 나 크랙킹 tool들이 발견되면,

 

어떻게 처리할지를 설정한다. 

 

Display Message, Exit Silently, Crash Application 중에 선택할 수 있다. 

 

Display Message를 선택할시 Customized Dialogs 에서 메시지를 수정할 수 있다.

 

 

posted by 갱우덩 2020. 1. 21. 23:09

더미다(themida) UI

 

UI를 띄워서 파일에 packing을 입히려면, 1번에 파일 1개만 packing을 적용할 수 있다.


Themida V2.4.6.30 : themida 버전정보


project *UNSAVED* : themida를 그냥 UI버전으로 띄웠다는 메세지, themida packing을 어떻게 적용

 

하겠다는  설정을 위 화면에서 Save 를 통해서 저장할 수 있고 이 설정대로 파일1개 혹은 다수에게 

 

themida를 적용할 수 있다.


Get from version info 체크박스를 누르면 현재 themida packing을 적용하려는 대상이 되는 파일에 대한

 

정보를 보여준다. 해당 정보는 파일의 리소스단에 저장되어 있는 정보이다. 


Same as input : 원본 파일에 themida를 적용할지 유무 결정. 체크해제시 Output Filename 에 themida 

 

적용된 파일 이름을 지정할 수 있다


Keep original date time : 아래 그림처럼 만든 날짜를 themida 적용전의 값을 유지하도록 한다.

 

 

posted by 갱우덩 2019. 5. 14. 20:00

제품명에 대해서는 개인적으로 이렇게 해석하고 있습니다.

 

themida : the + mida

 

구글번역기 돌려봐도 themida 주제, 테마 라고 번역되는데 아닌듯~

 

themida는 debugger 등을 통해서 application을 reversing해서 application을 Crack 하지 못하도록

 

application의 실행 code 및 Data들을 난독화하는 프로그램입니다. 제일 유명합니다.

 

 

무료 패킹(==난독화) 툴들이 몇가지 있으나 금방 풀려버리나 봅니다. 그리고 themida 로 패킹한 것도 엄청난 능력자님들은 몇일 고생해서 풀어버리는 듯합니다. 자세한 방법은 모릅니다.

 

 

구입 >

중간 업체 없는게 더 싸지 않을까 하고 홈페이지 직접 방문해 보고 국내 reseller와 비교 해봤는데,

 

국내 reseller를 통해서 구입하는게 인터넷 Home page를 통해 결재하는 것보다 2~3 만원 정도 더 싸네요. 리셀러를 통해 사는게 더 싸다는 희안한 현실~

 

 

문의 >

site에 접속해서 문의 mail 남기면 보통은 1~2 일안에 답변이 잘 옵니다. 3~4일 후에나 답변온 적이 1번 정도 있었구요.
(http://www.oreans-support.com/kmp/index.php?/) Program Files 무설치 형태로 압축해서 주며, 원하는 Folder에 넣고 사용하면 됩니다. 인증관련 아무런 과정도 없어요. 그냥 쓰면 된데요~ ㅋ (왠 자신감?) 

 

UI : Delphi - UI 느낌이 VC++ 은 확실히 아니었죠~

 

엔진 : ASM - 대단합니다. 이 복잡한 프로그램의 Engine을 우째 어셈블리어로 개발했는지~ ㅠㅠ~ 존경스럽네요.

 

 

themida 제품의 UI 입니다.

 

나라별 언어 pack 같은거 제공해주면 좋을텐데, 그런거 없습니다. 그리고 보시면 UI가 상당히 불편합니다.

 

packing 할수 있는 파일을 UI 형태로는 1번에 1개 밖에 하지 못합니다. 물론, 나중에 설명드리겠지만 한꺼번에

 

여러개를 packing 할 수도 있습니다만, UI로 packing 적용할 때에는 1번에 1개밖에 안됩니다. ㅠㅠ.

 

너무 당황스러웠지만~ 지금은 적응했다는~

 

posted by 갱우덩 2019. 5. 14. 19:36

code 난독화 program으로 유명한 themida PDF Help 파일 올립니다. 

 

잘 해석해서 읽어보시면 쓸만 합니다. ^^

 

해석이 귀찮으신 분들을 위해 직접사용한 후기 및 사용방법에 대해서 좀더 자세히 글을 올릴 예정입니다.

 

ThemidaHelp.pdf
2.84MB

 

posted by 갱우덩 2019. 2. 19. 19:14



(펌 : Dotfuscator를 이용한 솔루션 암호화(난독처리) 원리 )

오늘날 대부분의 상업용 난독 처리기에서는 의미 없는 식별자를 적용하는 이름 바꾸기 기법을 사용합니다. 보통 이러한 식별자는 한 문자 정도로 길이가 짧습니다. 난독 처리기는 코드를 처리할 때 다음 번에 대체할 의미 없는 식별자를 선택합니다. 이름 바꾸기 방법은 겉으로는 간단해 보이지만 되돌릴 수 없다는 점에서 해싱이나 문자 집합 오프셋보다 유용합니다. 프로그램 논리는 유지되지만 이름은 무의미해집니다. 따라서 프로그램 구조를 이해하기가 아주 어려워집니다. a, t.bb(), ct, 2s(e4)와 같은 식별자의 의미를 invoiceID, address.print(), userName, deposit(amount)과 같은 개념으로 유추해 내기는 아주 어렵습니다. 그래도 프로그램 논리는 리버스 엔지니어링할 수 있습니다.

보다 정교한 형태의 난독 처리에는 PreEmptive Solutions에서 고안하여 특허를 받은 알고리즘인 Overload Induction이 사용됩니다. 보통 이름 바꾸기도 여전히 사용되지만 교묘하게 왜곡되기도 합니다. 메서드 식별자는 철저히 범위를 분석한 후에 최대한 오버로드됩니다. Overload Induction은 이전 이름을 각각 하나의 새 이름으로 바꾸는 대신 최대한 많은 메서드의 이름을 동일한 이름으로 바꿉니다. 놀랍게도 이와 같은 복잡한 상황에서도 논리는 손상되지 않습니다. 다음은 Overload Induction 기법의 강력한 기능을 보여 주는 간단한 예입니다.


난독 처리 전의 원본 소스 코드

private void CalcPayroll(SpecialList employeeGroup) {
   while (employeeGroup.HasMore()) {
        employee = employeeGroup.GetNext(true);
        employee.UpdateSalary();
        DistributeCheck(employee);
    }
}

Dotfuscator의 Overload Induction 기능으로 난독 처리한 후 리버스 엔지니어링된 소스 코드

<pre class="code" style="font-family: Consolas, Courier, monospace; line-height: 17.5499992370605px;">private void a(a b) {
    while (b.a()) {
        a = b.a(true);
        a.a();
        a(a);
    }
}

이 예에서 난독 처리된 코드가 더 간단하다는 것을 알 수 있습니다. 이름 바꾸기를 수행하면 부수적으로 크기 축소 효과를 얻을 수 있습니다. 예를 들어, 길이가 20자인 이름을 a()로 바꾸면 많은 공간(19자)이 절약됩니다. 문자열 힙 항목을 보존하는 방식으로도 공간이 절약됩니다. 모든 이름을 ?Ba뵹?바꾼다는 것은 ?Ba뵲?한 번만 저장되므로 ?Ba뵹?이름을 바꾼 메서드나 필드가 모두 ?Ba뵺?가리킬 수 있음을 의미합니다. Overload Induction을 사용하면 가장 짧은 식별자가 계속해서 다시 사용되므로 이 효과는 더욱 커집니다. 일반적으로 Overload Induction이 사용된 프로젝트는 메서드 중 최대 70%의 이름을 a()로 바꿉니다.

Dotfuscator는 MSIL 파일을 처리할 때 파일에서 디버그 정보와 중요하지 않은 메타데이터를 제거합니다. 이렇게 하면 보호 및 보안 성능이 향상될 뿐 아니라 MSIL 파일의 크기가 축소됩니다.

난독 처리는 소스 코드가 아닌 컴파일된 MSIL 코드에 적용되는 프로세스입니다. 이름을 바꾸어도 개발 환경과 도구는 변경되지 않으며 소스 코드는 어떠한 방법으로도 변경되거나 읽히지 않습니다. 난독 처리된 MSIL 코드는 기능적으로 기존 MSIL 코드와 동일하며 CLR(공용 언어 런타임)에서 실행할 때 동일한 결과를 나타냅니다. 그러나 반대의 경우는 가능하지 않습니다. 강력하게 난독 처리된 MSIL을 디컴파일할 수 있다고 해도 원본 소스 코드와 비교하면 의미에 상당한 차이가 있습니다. 다음 그림은 Dotfuscator의 난독 처리 과정을 보여 줍니다.

PreEmptive Solutions에서는 Java용 DashO 도구를 필두로 하여 1996년부터 중간 컴파일된 소프트웨어를 보호하고 향상시켜 왔습니다. PreEmptive Solutions의 제품은 강력한 성능과 다양한 기능 및 특허 받은 고유 기능으로 시장을 주도해 왔습니다.

Dotfuscator는 지적 재산의 보호 문제를 염려할 필요 없이 강력한 .NET 플랫폼을 활용할 수 있도록 해주는 일련의 도구로 제공됩니다. Dotfuscator에는 세 가지 버전이 있습니다.

 Dotfuscator Community Edition은 무료로 기본적인 난독 처리 기능을 제공하는 버전입니다. 식별자의 이름을 바꿔 리버스 엔지니어링에 대한 차단 수준을 올리는 것이 주 목적입니다. Dotfuscator Community Edition에는 보다 쉽게 보호하는 고급 기술이 사용되었습니다. 또한 의미 없는 임시 식별자로 이름을 바꾸기 때문에 크기가 약간 줄어듭니다.


Dotfuscator Community Edition의 제한 사항은 다음과 같습니다.

<ul type="disc" style="font-family: 'Malgun Gothic', Gulim, 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); line-height: 17.5499992370605px; white-space: normal;">
  • Visual Studio와 별개로 작동하지 않습니다. 즉, 상업용 빌드 환경에서는 사용할 수 없습니다.
  • .NET 2.0 제네릭 형식 및 메서드의 이름은 바꾸지 않습니다.
  • Microsoft Office 통합용으로 작성된 관리 코드는 Dotfuscator로 난독 처리하지 않습니다.
  • Microsoft SQL Server 2005에서 실행되는 관리 코드는 Dotfuscator로 난독 처리하지 않습니다.
  • 전역 옵션 이외의 라이브러리 모드를 지원하지 않습니다. 라이브러리 모드는 모든 입력 어셈블리에 대해 설정되거나 해제됩니다.
  • 전역 옵션 이외의 선언적 난독 처리 설정을 지원하지 않습니다. 선언적 난독 처리 설정은 모든 입력 어셈블리에 대해 설정되거나 해제됩니다.
  • CLR을 대상으로 하는 C++ 응용 프로그램을 지원하지 않습니다.
  • </ul> 

    사용장법에 대한 강좌~ 내용이 상세하고 좋아서 남김 - VS2008 기준이니 메뉴나 사용법이 약간 차이는 있을듯~ ^^


    (강좌1)

    https://rkttu.tistory.com/entry/Reflector-%EA%B0%95%EC%A2%8C-1-%EB%91%98%EB%9F%AC%EB%B3%B4%EA%B8%B0


    (강좌2)

    https://rkttu.tistory.com/entry/Reflector-%EA%B0%95%EC%A2%8C-2-Disassembling-Analyzing


    (강좌3)

    https://rkttu.tistory.com/entry/Reflector-%EA%B0%95%EC%A2%8C-3-%EB%A6%AC%EC%86%8C%EC%8A%A4-%EB%B6%84%EC%84%9D-%EB%B0%8F-5x-%EB%B2%84%EC%A0%84%EC%9D%84-%EC%9C%84%ED%95%9C-%EB%8B%A4%EC%96%91%ED%95%9C-%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8


    나중에 보고 함써좌야징~



    근데~~ themida에 비해서는 별루인듯~




    posted by 갱우덩 2018. 12. 11. 10:22
    출처: https://12bme.tistory.com/293 [길은 가면, 뒤에 있다.]

     해시

     자릿수

     MD2

     32

     MD4

     32

     MD5

     32

     SHA1

     40

     SHA224

     56

     SHA256

     64

     SHA284

     96

     SHA512

     128

     RIPEMD128

     32

     RIPEMD160

     40

     WHIRLPOOL

     64

     TIGER128,3

     80

     TIGER160,3

     128

     TIGER192,3

     32

     TIGER128,4

     40

     TIGER160,4

     48

     TIGER192,4

     32

     SNEFRU

     40

     GOST

     48

     ADLER32

     64

     CRC32

     64

     CRC32B

     64

     HAVAL128,3

     8

     HAVAL160,3

     8

     HAVAL192,3

     8

     HAVAL224,3

     128

     HAVAL256,4

     128

     HAVAL128,4

     32

     HAVAL160,4

     40

     HAVAL192,4

     48

     HAVAL224,4

     56

     HAVAL256,4

     64

     HAVAL128,5

     32

     HAVAL160,5

     40

     HAVAL192,5

     48

     HAVAL224,5

     56

     HAVAL256,5

     64








    posted by 갱우덩 2017. 11. 29. 17:43



    일반적으로 서버의 SSH 접속하기 위해 사용자의 아이디와 비밀번호가 필요하다. 이 말은 즉슨 대충 ID만 알아도 Brute Force Attack 할 수 있다는 얘기가 된다. 서버 관리자 입장에서 생각해보면 여간 짜증나는 일이 아니다. 로그인이 안 된다 할지라도 해킹이 시도되는 동안 소모되는 서버 자원은 어쩔 것인가 ㄷㄷㄷㄷ

    이를 방지하기 위해 Fail2Ban 과 같은 Python 기반의 스크립트를 이용하여 지정된 횟수 이상으로 로그인을 실패하면 해킹으로 판단하여 일정시간 접근을 차단시키는 방법도 있다. 하지만 이 방법도 지정된 횟수 이내로.. 예를 들면 로또보다 더한 확률로 1~2번 시도만에 로그인이 성공하면 낭패다. (그러니 유저들을 추가할 땐 비밀번호 정책을 빡세게 합시다 ㄷㄷㄷ)

    하지만 OTP를 이용하게 되면 약간은 안심이 될 것 같다. 1분마다 6자리의 숫자가 갱신이 되고 그 이전의 숫자조합은 무용지물이 되어버리니 이 얼마나 짱짱한가. 몇가지 OTP 서비스들이 있긴 하지만 Google OTP(정확히 말하면 Google Authenticator) 를 이용하기로 했다. 별 거 없다. 왜냐면 구글신이니까..

    말머리에서 언급한 바와 같이 SSH 접속하기 위해선 사용자의 아이디와 비밀번호가 필요하지만 Google Authenticator 를 이용하면 그 중간에 OTP 번호를 입력하는 절차가 추가된다.

    예를 들면 다음과 같다.

    일반적인 SSH 로그인

    일반적인 SSH 로그인

     

    OTP 이용한 SSH 로그인

    OTP 이용한 SSH 로그인

     

    세팅하는 방법을 순서대로 나열하겠다. 기존의 타 블로그들에서 작성된 대부분의 Google Authenticator 세팅 방법들은 크게 문제가 없지만 중요한 부분이 빠져있다. 이 글에선 빠지지 않고 모두 작성해놨으니 그대로 차근차근 실행만 한다면 될 것이다.

    • CentOS 6.8 & 7 기준으로 작성
    • root (최고관리자) 권한 기준으로 작성
    • 작업시작 전 모든 패키지들을 업데이트 (하지 않아도 크게 상관 없음)
    1. .ssh 디렉토리 권한 변경
      * 필수 작업 – 0700으로 맞추지 않으면 로그인이 제대로 작동하지 않는다.
    2. Google OTP 패키지 설치에 필요한 필수 패키지 설치
    3. Git 으로 Google OTP 다운로드
    4. 소스 컴파일 작업
    5. Google Authenticator 설정
    6. y 누르고 엔터 (일반적으로 2번)
    7. 스마트 폰에 Google Authenticator 앱 설치 후, 모니터에 나타나는 QR코드 촬영 또는 Secret Key 작성으로 OTP 추가
    8. PAM 설정

      8.1. %PAM-1.0 바로 밑에 다음 내용 추가 (한 줄임)

      8.2 저장
    9. SSH 설정

      9.1. 다음 설정사항들을 모두 yes로 변경

      9.2 저장
    10. SSH 재시작
    11. (옵션) 모든 유저에게 OTP 부여가 완료되었고 더이상 유저 추가 계획이 없을 경우 8.1. 에서 추가된 내용 중 nullok 를 삭제한다.
      – nullok 삭제시 해당 서버 SSH에 접근하는 모두가 OTP를 거쳐야 함.

     

    위 과정을 모두 마치면 Google Authenticator 를 거쳐 로그인을 할 수 있다. 이렇게 되면 어제 작성했던 Root 비밀번호 자동 변경 쉘 스크립트에서 비밀번호를 좀 더 약하게 생성시켜도 괜찮을 듯 하다.

    약 2주간 적용하고 싶은 마음에 수많은 삽질을 했고 결국 성공했다. 별 거 아닌데 뿌듯하다.

    posted by 갱우덩 2017. 11. 29. 17:28


    앞의 글 참고 내용에도 있었지만 이글에서 구글 OTP를 사용한다는 것은 구글계정과 연동하는 것이 아닙니다.


    그냥 구글OTP를 번호생성 법칙을 사용하는 것에 대한 겁니다.



    앞에 기록했던 계시내용 화면에서


    " 내 계정 >> 앱 비밀번호 " 쪽으로 들어가면, 앱을 선택하고 , 비밀번호를 볼 수 있는 화면이 나옵니다.


    아래 그림 참조하세요.





    그럼 저는 이렇게 앱 이름을 정합니다.





    그럼 비밀번호가 나옵니다. 이건 구글쪽에서 생성해준 번호 입니다. 꼭 기록해놓으세요. 


    site에서는 기록할 필요 없다고 하는데, 이거 다시는 못봅니다.  


    구글 OTP 앱 설치했고, 거기에 이 앱에 대한 OTP를 이미 추가해줬다면 모를까 꼭 기록해놓으세요. 


    하지만, 앱이름과 이 비밀번호가 노출되면, 동일한 구글OTP 번호를 생성할 수 있습니다. 뚫립니다.


    ㅋㅋㅋ 그래서 이 화면에서 빨리 구글OTP 앱을 설치하고는 


    앱의 "제공된 키입력" 메뉴를 선택해서 


    계정이름"앱이름"을, 내키"기기용 앱비밀번호" 를 입력해주면 됩니다.


    그럼 위 사진에서 비밀번호는 더 쓸일이 없어요.


    근데 구글 OTP 앱의 계정 세부정보 입력 화면에서 "시간 기준"을 선택할시 


    구글OTP 값을 생성하는 기기의 시간값이 차이가 나서는 않됩니다. 그럼 다른 OTP 값이 생성됩니다.


    30초 안에는 동일한 값이 생성됩니다. 그래서, 동일한 NTP Server를 사용하면 시간차가 날 일이 없겠습니다만


    30초 라는 기준이 쉽지는 않을 듯 합니다.


    어쨌든 요렇게 해주고 나면, 



    요렇게 추가된 앱 / OTP가 정해집니다. 



    뭔가 설명이 이상해지는 듯 하네요...












    posted by 갱우덩 2017. 11. 29. 16:15


    구글 계정 로그인과 같은 과정은 생략.... 구글 OTP 사용 방법 설정에 대해서 설명합니다.


    아래 그림 처럼, 2단계 인증을 활성화 시키시고, 앱비밀번호 라는 부분을 통해서


    구글 OTP를 특정 Service의 인증용도로 사용할 수 있습니다.


    물론, 스마트폰에서 구글OTP 앱도 설치하셔야 겠죠~






    2 단계 인증의 기본 설정이 보통은 아래 그림의 구글 메세지로 되어 있습니다. 이걸 구글 OTP앱 으로 


    변경해야 됩니다. 그러기 위해  Google 메세지 오른쪽에 있는 쓰레기통 아이콘으로 제거를 해주시면 아래로 내려가고


    OTP앱이 (기본값) 으로 바뀌더군요~




    2단계 인증이라는 것이 Google 계정에 로그인할 때, 보안성을 강화하기 위한 용도로 사용하는 것입니다만


    Google 메시지가 훨씬 편리하고 쉬워보입니다. 로그인하려고 시도하면, 모바일로 뜨는 화면에서


    본인이 맞다는 버튼만 눌러주면 되니까요~ ^^


    그런데도 이 귀찮은 구글 OTP를 쓴다는 것은 그냥 자기 솔루션에 보안성 강화를 위해 구글이 만들어놓은 OTP 를


    사용하고 싶다는 의미이겠죠~



    말이 길었네요. 저도 아래글 보고 따라해보며 배운 겁니다. 참고하시길~


    -------------------------------------------------------------------------------------------------------------------------------


    (펌 : http://sojakzi.tistory.com/253 )



    OTP(One Time Password)는 '일회용 패스워드'의 일종으로 은행 등에서 사용하는 강력한 인증 방식입니다.

    인터넷뱅킹 등에서 보안카드와 OTP 중에서 선택해서 사용할 수 있는 건 이미 많은 사람이 알고 계실 겁니다. 그리고 피싱 사이트들이 보안카드 정보만 빼내가려고 하지 OTP 정보는 아직 건드리려고 시도하지 않기 때문에 수많은 피싱 공격으로부터 안전해진다는 사실도요. 아 이건 잘 모르시려나.


    이 포스트는 안전한 은행거래를 위한 가이드가 아니고 OTP를 내 애플리케이션에 사용하는 방법을 설명하는 것이므로 보안카드 얘기는 그만하죠.


    구글 OTP, GOTP는 안드로이드나 애플 앱스토어 등에서 다운로드받을 수 있습니다. 찾는 건 알아서 찾으시고, 설치해서 적절히 설정하고 실행하면 이런 화면을 보시게 됩니다.



    이 GOTP는 오픈 소스라고 하는데 소스 분석은 나중에 하고요, 이 포스트에서는 이 GOTP를 내 애플리케이션에서 사용하는 방법을 설명드리겠습니다.

    여기에는 세 개의 계정이 등록돼있습니다. 마지막 것이 내 애플리케이션에서 사용할 OTP코드인데요, 이걸 추가하는 방법부터 설명드리죠.



    메뉴 버튼을 눌러 "계정 설정" 을 선택합니다.



    "제공된 키 입력하기" 를 누릅니다. 바코드 스캔을 선택하면 자동으로 카메라가 켜지면서 QR코드를 입력하게 되는데 이 방법은 나중에 별도로 포스팅하겠습니다.




    여기에 이렇게 입력을 하는데요, 키 부분은 아무 거나 입력하면 안되고 "애플리케이션 비밀번호"를 사용해야 합니다.


    내용추가: secret key는 Base32 인코딩된 10바이트 랜덤 문자열입니다. 관련 포스트는 아래 링크 참조.

    Google OTP 용 secret 생성 코드(파이썬)



    https://accounts.google.com/b/0/IssuedAuthSubTokens 에 접속합니다. 구글 계정(지메일 계정)이 있어야 하고 이미 접속한 상태라고 할지라도 암호를 한번 더 물어봅니다.




    아래쪽에 보시면 "애플리케이션 비밀번호" 라는 게 있는데 여기에 dev-test를 입력하고 "비밀번호 생성"을 클릭.

    참고로 이 이름은 그냥 식별자에 불과하며 위의 GOTP에 입력한 이름하고는 달라도 됩니다.




    여기에 secret code 가 나옵니다. "완료"를 클릭하면 창이 닫히고 그 뒤에는 저 비밀번호를 다시 볼 수 없으니 누르기 전에 저 코드를 어디에 복사해 두어야 합니다.


    이제 애플리케이션에서 GOTP를 사용해봐야겠죠. 파이썬 모듈인 onetimepass 모듈을 사용해보겠습니다.


    https://github.com/tadeck/onetimepass

    (문서 페이지: http://otp.readthedocs.org/en/latest/ )

    $ sudo pip install onetimepass

    이렇게 인스톨하셔도 되고


    $ git clone https://github.com/tadeck/onetimepass.git

    $ cd onetimepass/

    $ sudo python setup.py install


    이렇게 인스톨하셔도 됩니다.


    파이썬 REPL로 간단하게 테스트해보죠.

    $ python

    Python 2.7.3 (default, Apr 10 2013, 06:20:15) 

    [GCC 4.6.3] on linux2

    Type "help", "copyright", "credits" or "license" for more information.

    >>> import onetimepass as otp

    >>> otp.valid_totp('123456', 'cypuribxkxbfplde') # 1

    False

    >>> otp.valid_totp('867733', 'cypuribxkxbfplde') # 2

    True

    >>> otp.valid_totp('867733', 'cypuribxkxbfplde') # 3

    True

    >>> otp.valid_totp('867733', 'cypuribxkxbfplde') # 4

    False

    >>> otp.valid_totp('425709', 'cypuribxkxbfplde') # 5

    True

    >>> 


    #1 : 명백히 틀린 코드로 인증 시도 : False

    #2 : 현재 시각의 OTP 를 입력 : True

    #3 : GOTP가 갱신되기 전에 같은 코드로 인증 시도 : True

    #4 : GOTP가 갱신된 직후에 인증 시도 : False

    #5 : 갱신된 OTP 입력 : True


    보시면 아시겠지만 구글 계정 정보는 입력하지 않습니다. cypu로 시작하는 '애플리케이션 비밀번호'가 일종의 애플리케이션 키 역할을 합니다. 구글 계정하고는 완전히 따로 작동하는 것이기 때문에 설령 여러분이 애플리케이션 비밀번호를 '취소' 해서 키를 삭제한다고 하더라도 이 애플리케이션의 OTP인증은 그대로 동작합니다. 즉 구글 계정과 연동하는 게 아닙니다.

    GOTP도 구글 계정하고는 상관없이 작동하는 것이고 애초에 네트워크에 연결돼있을 필요도 없는 애플리케이션입니다. GOTP가 GOTP인 이유는 구글에서 만들었기 때문이지 구글 계정이 있는 사람만 사용할 수 있는것도 아닙니다. 물론 구글 계정이 없는 사람은 저 "애플리케이션 비밀번호"를 다른 방법으로 얻어내야겠죠.


    여러 사용자를 회원가입 받아 각각을 otp로 인증하고자 할 때에는 저 secret 부분을 ID와 엮어서 DB에 넣어두면 됩니다. 당연히 secret가 유출되면 해커가 자신의 GOTP에 그걸 등록해서 남의 계정을 막 털어먹을 수 있게 되므로 키관리에 각별히 주의해야 합니다. secret 키를 복호 가능한 암호화를 시켜서 저장하는 등 상상할 수 있는 모든 방법을 동원해서 키 유출을 방지하시기 바랍니다.


    참고로 secret는 어떤 특별한 규칙에 따라 생성되는 것으로 보이며 랜덤 문자열을 입력하면 에러를 냅니다. 그래서 구글의 '애플리케이션 비밀번호'를 사용했습니다.


    위의 키 관리상의 취약점 때문에 ID와 OTP만 사용하는 인증 방법은 위험하며 패스워드와 병행하여 2단계 인증으로 사용하는 걸 권장합니다.


    혹시 뭘 해도 False가 뜨는 사람은 서버 시계(파이썬이 실행중인 컴퓨터의 시계)가 틀린 것이니 NTP등으로 서버 시각을 정확히 맞추시기 바랍니다. 일회용인 ntpdate보다는 항상 시각을 동기화해주는 NTP를 사용하는 것이 좋습니다. 그리고 서버 시계는 로컬 타임이 아니라 UTC에 맞추셔야 한다는거. 서버의 바이오스 타임은 UTC에 맞추고 별도의 타임존 세팅을 통해 로컬 타임을 얻는 게 서버 시각을 설정하는 올바른 방법입니다.

    휴대폰은 CDMA프로토콜의 특성상 항상 정확한 시계를 사용하니 휴대폰 시계는 확인할 필요가 없습니다.


    혹시 GOTP 앱을 사용하지 않고 자체적인 모바일 클라이언트를 만들려는 분은 위의 onetimepass 모듈의 get_totp() 메서드를 사용하면 됩니다. 이런 식이죠.


    >>> otp.get_totp('cypuribxkxbfplde')

    981370

    >>>


    이 get_totp는 매 30초마다 다른 값이 출력됩니다. 마지막 호출 이후 30초가 아니라 매시 매분 25초와 55초 시점에서 갱신됩니다. 따라서 14:35:50에 메서드를 호출했다면 출력 결과가 유효한 시간은 14:35:55까지. 즉 겨우 5초입니다.

    간혹 여섯 자리 숫자가 아니라 다섯 자리 이하의 숫자가 뜰 때도 있는데 앞부분이 0이라 그렇게 된 겁니다. 따라서 그냥 사용하지 마시고 꼭 여섯 자리 숫자로 출력될 수 있게 적절한 print 포매팅을 하시기 바랍니다.



    출처: http://sojakzi.tistory.com/253 [소작지프로젝트]