Category Archives: 보안

FIDO UAF U2F

용어정리

FIDO : Fast IDentity Online
UAF : Universal Authentication Framework
U2F : Universal 2nd Factor
ASM : Authenticator Specific Module

FIDO : ID, PW기반의 인증을 대체하기위한 기술
FIDO Aliance : FIDO표준을 만들기위한 연합
UAF : 로그인 자체를 대체하는 기술
U2F : 로그인 보안을 강화하기위해 ID, PW를 입력받고 추가로 인증하는 방법

FIDO 1.0 :

 

FIDO USB Key

일본사는 친구통해 구매한 중국산Feitian FIDO 동글이 왔다. (일반 우편, 260엔? 정확히 일주일 걸림)

뭐 그냥 흔한 USB 메모리처럼 생겼으나

[ 1122.049536] usb 1-1.1.2: new full-speed USB device number 10 using xhci_hcd
[ 1122.164650] usb 1-1.1.2: New USB device found, idVendor=096e, idProduct=0858
[ 1122.164654] usb 1-1.1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1122.164657] usb 1-1.1.2: Product: U2F CCID KBOARD
[ 1122.164659] usb 1-1.1.2: Manufacturer: FT
[ 1122.168493] hid-generic 0003:096E:0858.0005: hiddev0,hidraw4: USB HID v1.00 Device [FT U2F CCID KBOARD] on usb-0000:00:14.0-1.1.2/input0

키보드로 인식한다.

 

잉여잉여한 추석을 통해 사용방법을 익혀볼 예정. (이글도 업데이트 예정)

 

오픈소스

https://github.com/apowers313/fido2-server
https://github.com/google/u2f-ref-code/

 

SmartCard로써 사용

키, 서명생성

pkcs15-init –verify-pin –auth-id 80 –generate-key rsa/2048 –key-usage sign,decrypt –label “RSA”
openssl req -engine pkcs11 -new -key “pkcs11:object=RSA” -keyform engine -out myCert.pem -days 3650 -outform pem -x509 -utf8
pkcs15-init –store-certificate myCert.pem –id 00 –verify-pin

Linux ssh서버설정

~/.ssh/authorized_keys에 공개키 위치 (pkcs15-tool —read-ssh-key 00)

윈도 Putty-CAC

certutil.exe -scinfo 실행하면 Putty 설정메뉴의 Connection -> SSH -> Certificate에 Set CAPI Cert 누르면 인증서가 뜬다.
아니면 set PKCS cert 해서 “C:\Program Files\OpenSC Project\OpenSC\pkcs11\opensc-pkcs11.dll”를 지정해줘도 된다.

https://zerowidthjoiner.net/2019/01/12/using-ssh-public-key-authentication-with-a-smart-card
https://github.com/OpenSC/OpenSC

only@ThinkPad-E585:~/.ssh$ pkcs15-tool --dump
Using reader with a card: FT CCID [CCID] 00 00
PKCS#15 Card [GIDS card]:
	Version        : 2
	Serial number  : 3b61a83369e8d6-----------------
	Manufacturer ID: www.mysmartlogon.com
	Flags          : 

PIN [UserPIN]
	Object Flags   : [0x03], private, modifiable
	ID             : 80
	Flags          : [0x12], local, initialized
	Length         : min_len:4, max_len:15, stored_len:0
	Pad char       : 0x00
	Reference      : 128 (0x80)
	Type           : ascii-numeric
	Tries left     : 3

Private RSA Key [RSA]
	Object Flags   : [0x01], private
	Usage          : [0x06], decrypt, sign
	Access Flags   : [0x1D], sensitive, alwaysSensitive, neverExtract, local
	ModLength      : 2048
	Key ref        : 129 (0x81)
	Native         : yes
	Auth ID        : 80
	ID             : 00
	MD:guid        : 0d3bd9b5-0374-38b9-c5ae-37d54a890cb6

Public RSA Key [RSA]
	Object Flags   : [0x00]
	Usage          : [0x41], encrypt, verify
	Access Flags   : [0x02], extract
	ModLength      : 2048
	Key ref        : 129 (0x81)
	Native         : yes
	Path           : 3fffb081
	ID             : 00

X.509 Certificate [RSA]
	Object Flags   : [0x00]
	Authority      : no
	Path           : a010df25
	ID             : 00
	Encoded serial : 02 14 1A0146494D172CCF7D5B31E1A43A4A571BBE35D8

Ref

https://developers.yubico.com/U2F/
https://fidoalliance.org/specs/fido-u2f-v1.0-ps-20141009/fido-u2f-hid-protocol-ps-20141009.html
https://github.com/hillbrad/U2FReviews
https://www.rcdevs.com/docs/howtos/epass/epass/ [feitian-epass-nfc.pdf]
박승철. (2017). PKI 인증과 FIDO 인증에 대한 비교 분석. 한국정보통신학회논문지, 21(7), 1411-1419.
조상래, 조영섭, 김수형. (2016). FIDO 2.0 범용인증기술 소개. 정보보호학회지, 26(2), 14-19.
김재중. (2015). FIDO(Fast IDentity Online)를 이용한 비밀번호 없는 공인인증시스템에 관한 연구. 정보과학회지, 33(5), 9-12.

비밀번호를 생년월일로 사용한 보안메일

몇일전 나의 메일주소로 X통신사의 이메일 청구서가 날라왔다.
내용은 보안메일이라고 사용자의 생년월일을 입력하라고 요구하였다.
수신한 메일은 나의 청구서가 아니며 비밀번호에 해당하는 생년월일도 모르는 상황이다.
잠깐 생각해보니 사람이 100년 산다고 생각하고 1년은 365일이라는걸 가정했을때 간단하게 36500의 경우의 수를 얻을 수 있었다.
또한 미성년의 경우는 제외하고 가장 가까운 날짜부터 차례로 계산한다고 하면 3만이 되지않는 경우의 수가 나온다.
직접 손으로 입력하기에는 많은데 JavaScript를 이용하여 패스워드에 해당하는 문자열을 생성하고 이를 Decrypt에 직접 대입하며 성공할때까지 수행하도록 만들 수 있다.

function toYMD(date) {
    var d = date.getDate();
    var m = date.getMonth() + 1;
    var y = date.getFullYear();
    return y.toString().substr(2,2) + (m<=9 ? '0' + m : m) + (d <= 9 ? '0' + d : d);
}

d= new Date();
d.setFullYear(d.getFullYear()-20);

while (1)
{
	d.setDate(d.getDate()-1);
	sd = toYMD(d);
	console.log("Current %s",sd);
	if(SecureEngine.decryptFunc(sd) != null) // 함수이름은 ^^;
	{
		console.log("Found : %s",sd);
		break;
	}
}

생각보다 빠르진 않았지만 결과는 스크립트를 실행한지 30분이 되지않아 출력되었다.

획득한 비밀번호를 이용하여 보안(?) 메일을 열어볼 수 있었다.

VVIP고객님께서 갤럭시 J5로 바꾸면서 이메일 주소를 잘못입력한것으로 확인된다.
(수신거부가 없다..)

생년월일은 절대로 비밀번호로 사용하지 않도록 해야 한다.
(근데 내가 받아보는 카드 청구서도 비밀번호는 생년월일이었다…..)

warning.or.kr

스크린샷 - 2015년 06월 19일 - 20시 45분 37초우연찮게많이 만나는 페이지인 www.warning.or.kr의 메커니즘을 분석해보고자 한다.
본 페이지에서는 적당한 타겟으로 4shared.com을 예로 들었다.
크롬으로 http://www.4shared.com 요청시
1

NC로 HTTP GET 메소드 결과
2바로 warning.or.kr로 리다이렉트 되는것을 볼 수 있었다.
보다시피 DNS의 질의로는 필터링하지 않았다.
3따라서 패킷이 본서버로 가는중  필터링당한후 302가 날라오는것을 추측할 수 있다.
어떤 기준으로 필터링 되는지 알아보기위해 서버에 직접 접속한후 HOST 값만 localhost로 바꿨을때의 결과는 아래와 같다.
4정상적으로 결과값을 가져오는것을 확인할 수 있다.
그럼 패킷이 라우팅되는동안 HOST 필드를 확인하면서 블랙리스트를 만나면 실제 서버와 연결대신에 302를 날린다는것을 짐작할 수 있다.
어느 라우터에서 필터링이 걸리는지 확인하기위해 traceroute 를 실행하였다.
5이를 바탕으로 국가 경계점을 기점으로 HOST 필터링 여부를 확인하려 했으나 실패 ㄱ-

naver.com 에 HOST: www.4shared.com 시전시
6네이버 반환
www.google.com 에 HOST: www.4shared.com 시전시
7워링 반환

결론
ISP단에서 해외로 나가는 패킷에대해서 HOST 부분에 Inspection을 하는것을 알 수 있다.

우회방법
가장 좋은 우회방법은 SSL 사용이다.
https를 지원하지 않는 서버에는 HOST : localhost 나 가상 호스트 설정이 되어있는 서버로는
HOST : http://hostname 을 사용하면 우회가 가능하다. (여기까지 필터링은 하지 않는것으로 보인다)

NFC로 관리되는 도서 대여시스템 취약점

EAS(Electronic article surveillance)란 도난방지 장치 및 감지장치를 의미함.
http://en.wikipedia.org/wiki/Electronic_article_surveillance

많은 공공 도서관과 대학도서관에서 EAS를 위해 RFID를 사용중임
http://nicom.ibx.kr/bbs/board.php?bo_table=portfolio_x

호기심에 안드로이드의 TagInfo 어플로 해당태그를 스캔했더니
도서정보를 확인할 수 있었음.
taginfo

이 RFID 들은 NXP Icode SLI SL2 ICS20 제품이 사용됨.
http://www.nxp.com/documents/data_sheet/SL058030.pdf

데이터시트를 보니 EAS 라는 항목이 존재하고 이를 Set과 Reset 을 시킬수있는 프로토콜이 존재함.  (데이터시트 17p)
또한 이 플래그를 제어는 아무나 가능함.

간단한 안드로이드 어플리캐이션을 제작하여 테스트해봄
read unset
정상적으로 빌려온 도서이기에 EAS는 해제되어있음 (게이트 통과시 경보x)

이 도서에 Set 버튼을 통해 EAS 를 세팅
EAS Wirte
그후 태그 스캔시
read set
EAS가 세팅되어있음.

실제 화정 글샘도서관에서 실무자에게 양해를 구한뒤 실제환경에서 테스트를 모두 마치고 해당 내용 전달함. (14/03/04 11시경)

테스트한 태그는 모두 나인콤과 이씨오에서 정부에 조달한 제품으로 모두 간단히 본 어플에 태그함으로써 EAS비트를 조작할 수 있었음.
http://www.eco.co.kr/
http://nicom.ibx.kr/

NFC 지원 안드로이드폰은 현재 널리 보급되어있어서 EAS를 조작하는 어플리캐이션이 공개될 경우 도서관 뿐만 아니라 해당 태그를 사용하여 도난 방지하는 곳은 모두 무력하게 되므로써 이 시스템을 믿고 있었다간 큰 피해를 입을 가능성이 있음.

또한 회원카드 역시 동일한 태그를 사용하며 ISO/IEC 15693 (NfcV) 에 정의된 프로토콜을 사용함으로써 태그의 내용을 읽고 수정할 수 있으며 회원번호를 변조하여 타인명의로 대출할 수 있음.

해결방안 : 문제 발생전 태그 전량교체 외 해결방법이 없는 것으로 사려됨

 

ps. 도서관협의회에서 기 발표된 자료임.
http://www.kapul.or.kr/apload/userfiles/files/2014%20%EB%8B%A8%EA%B5%AD%EB%8C%80/%EC%A0%9C16%EC%B0%A8%20%EB%8F%84%EC%84%9C%EA%B4%80%EC%9E%A5%20%ED%9A%8C%EC%9D%98/ECO%20%EB%B0%9C%ED%91%9C%EC%9E%90%EB%A3%8C.pptx

G2 Lollipop 순정 루팅

For many foreigners.
First of all, thank you for visiting my blog. However below description is written in Korean. Perhaps, it is hard to understand. Threrfore, I recommand you to read these article

[Working][How To] Lollipop Root
by inLGG3


http://forum.xda-developers.com/android/development/guide-root-method-lg-devices-t3049772
thanks for translation to Unjustified Dev.

 

아래는 순정 G2(F320S), 30D 의 루팅과정을 안내한다.
아름다운 건축자재가 만들어 질 수 도 있으나 모든 책임은 엔터치는사람이…
LG는 루팅하면 소프트웨어뿐만아니라 하드웨어 게런티 까지 모두 Void 됨을 명심!

필요한 파일 :
http://download.chainfire.eu/supersu에서 UPDATE-SuperSU-v2.45.zip
rooting require 에 들어있는 busybox, g2_root.sh, Push_File.exe, Send_Command.exe
USB드라이버는 필요가 아니라 필수다.

Step1
MTP 모드로 연결하면 LGE Mobile USB Serial Port(v:1004,p:633E)로 잡는다
포트번호를 알아내야한다(생략)

Step2
Send_Command를 실행한다음 “ENTER”를 입력하면 폰이 다운로드 모드로 간다.
(ex: Send_Command.exe \\.\COM5)

Step3
Push_File로 g2_root.sh와 busybox, UPDATE-SuperSU-v2.45.zip 를 적당한 위치(/data)에 집어넣는다.(정상적으로 파일이 들어갔는지 확인해야한다!)
(ex: Push_File.exe \\.\COM5 g2_root.sh /data/g2_root.sh)

Step2
Push_File.exe로 파일전송시 에러율이 높아 adb로 전송해놓고 루팅과정을 시작한다.
adb push g2_root.sh /data/local/tmp/
adb push busybox /data/local/tmp/
adb push UPDATE-SuperSU-v2.45.zip /data/local/tmp/
(thanks for this idea to Unjustified Dev)

Step3
Send_Command를 실행한다음 “ENTER”를 입력하면 폰이 다운로드 모드로 간다.
(ex: Send_Command.exe \\.\COM5)

Step4
Send_Command를 실행시키면 루트쉘이 떠있다.
“sh /data/local/tmp/g2_root.sh dummy 1 /data/local/tmp/UPDATE-SuperSU-v2.45.zip /data/local/tmp/busybox” 를 입력해준다. (뭔가 주르륵 뜰것이다.)

Setp5
Send_Command창에 LEAVE 를 입력해주면 재부팅 되며 루팅이 되어있을것이다.

ps.
/data에 넣은 파일들은 직접 지워줘야된다(놔둬도 용량얼마안되지만).
커맨드가 잘 안먹힐 가능성이 높다. 반복하다보면 된다.(하지만 업데이트는 없다)
큰 용량은 PushFile로 안들어간다(대충 15mb 까지)
테스트는 winxp, F320s로 해봄.

If it helped you, please support my works
[paypal-donation purpose=”Support”]

 

qcdlcomm just for a mirror