GN⁺: TinySSH - NaCl과 TweetNaCl을 사용하는 소형 SSH 서버
(github.com/janmojzis)- tinysshd는 SSHv2 기능의 일부만을 구현한 미니멀 SSH 서버
- 최소 128비트 보안을 지원하고 캐시 타이밍 공격에 대비한 안전한 암호화만을 지원
- RSA, DSA, HMAC-MD5, HMAC-SHA1, 3DES, RC4 등 오래된 암호화는 구현하지 않음
- 비밀번호나 호스트 기반 인증과 같은 안전하지 않은 기능들을 구현하지 않음
- SSH1 프로토콜, 압축, 포트 포워딩, 에이전트 포워딩, X11 포워딩 등의 기능도 제공하지 않음
- 동적 메모리 할당을 사용하지 않아 할당 실패 등의 문제가 없음
암호화 원시 기능
- 최신 암호화 기술: ssh-ed25519, curve25519-sha256, chacha20-poly1305@openssh.com
- 이전 표준(20190101 버전에서 제거됨): ecdsa-sha2-nistp256, ecdh-sha2-nistp256, aes256-ctr, hmac-sha2-256
- 양자 컴퓨터에 대비한 암호화: sntrup761x25519-sha512@openssh.com, chacha20-poly1305@openssh.com
프로젝트 타임라인
- 실험적 단계(2014년): 실험을 목적으로 함
- 알파 단계(2015-2017년): 생산 환경에는 적합하지 않으나 테스트를 위해 준비됨
- 베타 단계(2018년부터 현재까지): 프로덕션에 적합함
- 안정화 단계: 양자 컴퓨터에 대비한 암호화를 포함하여 생산 환경에 적합할 것으로 예상
현재 릴리스 (20240101)
- 코드는 63899 단어로 구성됨.
- 베타 릴리스 상태임.
실행 방법
- TCPSERVER:
tcpserver -HRDl0 0.0.0.0 22 /usr/sbin/tinysshd -v /etc/tinyssh/sshkeydir &
- BUSYBOX:
busybox tcpsvd 0 22 tinysshd -v /etc/tinyssh/sshkeydir &
- INETD:
/etc/inetd.conf
파일에ssh stream tcp nowait root /usr/sbin/tinysshd tinysshd -l -v /etc/tinyssh/sshkeydir
추가 - SYSTEMD:
tinysshd.socket
및tinysshd@.service
파일을 통해 서비스 구성 및 실행
GN⁺의 의견
- tinysshd는 최소한의 기능을 가진 SSH 서버로, 보안에 중점을 둔 설계가 돋보임. 이는 과도한 기능이 없어 가볍고, 보안 취약점이 적을 가능성이 높다는 장점을 가짐.
- SSH 서버는 네트워크 보안의 핵심 요소이므로, tinysshd와 같은 최소주의 접근 방식은 특히 보안이 중요한 환경에서 유용할 수 있음.
- 다만, 일부 사용자에게는 포트 포워딩이나 X11 포워딩과 같은 고급 기능의 부재가 단점으로 작용할 수 있음.
- 양자 컴퓨터에 대비한 암호화를 지원한다는 점은 미래 지향적인 접근으로, 보안에 대한 지속적인 관심과 업데이트를 반영함.
- 비슷한 기능을 제공하는 다른 오픈소스 프로젝트로는 OpenSSH가 있으며, 이는 더 많은 기능을 제공하지만, 그만큼 더 복잡하고 관리해야 할 보안 측면이 많음.
- tinysshd를 도입할 때는 기능 제한이 프로젝트 요구 사항에 적합한지 고려해야 하며, 선택함으로써 얻는 이점은 간결함과 강화된 보안, 손실되는 이점은 일부 고급 기능의 부재임.
Hacker News 의견
-
TinySSH 사용 사례:
- 리눅스 부팅 중에 원격으로 암호화된 드라이브를 잠금 해제하는 데 사용됨.
- 머리 없는 NAS 서버에서 dm-crypt/LUKS와 ZFS를 사용.
- 커널/ZFS 업데이트 시 서버를 원격으로 재부팅하고, TinySSH를 통해 암호화 키 프롬프트에 접속해 드라이브 잠금 해제.
- TinySSH가 종료되면서 SSH에서 즉시 로그아웃되며, 몇 초 후 다시 SSH로 접속하면 완전히 부팅된 시스템에 접근 가능.
-
TinySSH 관련 링크:
- 현재 Slashdot 효과로 인해 접근이 어려움.
- 웹 아카이브를 통해 TinySSH 페이지 확인 가능.
-
TinySSH 코드량에 대한 의견:
- 코드량을 '단어'로 표현하는 것이 재미있음.
- 일반적으로 보안이 중요한 저장소는 'X 줄의 코드'로 광고하는 것이 일반적이나, '단어'로 표현한 것은 이례적.
-
TinySSH의 지원 범위:
- ed25519-sk를 지원하지 않는 것이 아쉬움.
- 그 외에는 매우 유망해 보임.
-
TinySSH의 감사 가능성:
- 100,000단어의 코드가 정말 쉽게 감사할 수 있는 수준인지 의문 제기.
-
TinySSH와 Dropbear SSH의 차이점에 대한 질문.
-
OpenSSH 대체에 대한 의견:
- OpenSSH는 많은 사람들이 사용하고 오랜 시간 동안 검증되어 안정성이 높음.
- OpenSSH는 OpenBSD 출신으로, 보안 코드 작성에 신중함.
- OpenSSH를 대체하기보다는 키 기반 인증으로 전환하고, Mozilla의 설정 아이디어를 포함한 몇 가지 간단한 구성 변경으로 OpenSSH를 더욱 강화하는 것이 좋음.
-
TinySSH 개발자의 작업에 대한 칭찬:
- TinySSH 외에도 여러 작은 네트워크 유틸리티와 서버를 개발.
- 이러한 작업들은 개발자가 무언가를 '만들기 위해' 그리고 이해하기 위해 노력하는 것처럼 보임.
-
TinySSH의 안전 기능:
- TinySSH는 비밀번호나 호스트 기반 인증과 같은 안전하지 않은 기능을 구현하지 않음.
- 공유 장치에서 개인 키를 등록하는 방법에 대한 질문.