Mercurial & Subversion 보안

cshong의 이미지

Subversion은 해당 revision만 저장소에서 받아오지만 이와 달리 Mercurial은 저장소를 통채로 복사해서 사용하지 않습니까?

사내에서 Subversion, Mercurial을 각각 사용했다고 가정했을 경우에 해킹되는 시점에서 Subversion은 해당 리비전만 해킹되는 것이지만 Mercurial 같은 경우는 소스뿐 아니라 개발이력.. 저장소가 통채로 해킹될수도 있는 것 같은데...

오픈프로젝트일 경우 괜찮은거 같은데 사내에서 비공개적으로 프로젝트를 진행하는 부분에서는 오히려 보안 부분에서는 취약한거 같은데 해결방법 없을까요?

ldgood의 이미지

해킹당했다는 정의가 ssh의 개인키를 빼앗겼다거나 계정정보를 빼앗겼다는 것이라면 서브버전의 저장소 이력이 오히려 더 위험하지 않나요?

머큐리얼은 애초에 오픈소스를 염두해둔 분산형 저장소이기 때문에 중앙저장소개념이 없으니까요.
그럼 공격자가 tip을 가진다 하더라도 저장소 일부의 스냅샷은 얻을 수 있어도, 전체 저장소의 이력을 알 수 없다고 생각됩니다.

비공개 사내 프로젝트에서, 그외의 해킹은 어떤것을 의미하는지 모르겠네요.

모든것은 모든것에 잇닿아 있다.


------------------------------
모든것은 모든것에 잇닿아 있다.

danskesb의 이미지

어차피 각종 보안 프로그램의 지뢰밭을 넘어 개인 컴퓨터가 뚫리면 그 다음부터는 안전한 것 아무것도 없습니다.

---- 절취선 ----
http://blog.peremen.name

dorado2의 이미지


어차피 다른 사용자에 의해 소스 전체에 접근 가능한 상태가 되었다면 game over 아닐까요.

subversion의 경우 불편한 점이 있긴 하겠지만, log, diff로 관심있는 개발이력 내용만 보는 게 무리도 아니겠구요.

다 뚫린 상태에서 어느 것이 보안이 취약하다고 따질 부분이 별로 없어보입니다.

cshong의 이미지

예로 들었던 상황에 보충 설명하면..

1. 프로젝트 규모가 크다고 설정.
2. 스파이가 우리 회사에 입사해 저장소에 접근 할 수 있는 권한을 얻음.
3. subversion의 경우 저장소 파일시스템에는 접근불가.

이 때..

subversion 사용의 경우 개발이력을 살펴보고 최신 소스를 가져갈 수는 있을지 모르겠지만 개발이력을 통째로 가져가려면 리비전1을 받아서 자신의 저장소에 커밋하고 다시 2를받아 커밋하고 이런식으로 할 수는 없는데 반해..
mercurial 사용의 경우 저장소를 복사해서 쓰기때문에 복사한 저장소만 취하면 모든 소스 및 개발이력이 포함된 저장소를 가져 갈 수 있는 문제가 있을 것 같습니다.

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!

jj의 이미지

subversion에서, 스파이가 revision하나씩 다 받아가면 결국 같습니다.

--
Life is short. damn short...

--
Life is short. damn short...

cshong의 이미지

음.. 그래서 프로젝트의 규모가 크다고 설정했습니다.
리비전 번호가 몇 만번일때 하나씩 가져간다면... 시간도 많이 걸리고 들킬 위험도 높아지지 않을까 해서요.

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!

winner의 이미지

저는 보안이야기를 하시길래 network 중간에서 가로채기 당할 때 위험성이 있지 않나 싶었습니다. Subversion의 경우 모든 것들이 오가는 clone 같은 경우가 빈번하지는 않을테니까요.

하지만 그렇게 따진다면 모든 성능좋은 응용들은 다 위험하군요. 성능이 좋으니 자료처리가 빠르니까요.

cshong의 이미지

하하;; 보안이라고 꼭 네트워크를 통한 외부 침입만 있는건 아니니까요.
성능이란 부분은 정확이 어떤 부분을 말씀하신건지 잘 모르겠습니다. 하드웨어, 소프트웨어 성능이 아무리 좋아도 사람이 해야 하는 작업이라 리버전 번호 몇 백번까지만 가져갈려고 해도 직접한다고 생각하니 벌써 어깨가 결리네요. ^^;

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!

cwryu의 이미지

svk를 써도 한방이고 git-svn을 써도 한방에 모든 리비전 받을 수 있는데, 속도는 느릴지 몰라도 어깨는 안 결립니다.

cshong의 이미지

일반 사용자가 svk나 git-svn을 사용하게 되면 기존의 일반 subversion 저장소에서 모든 리비전을 다 받을 수 있는건가요?
접근이 가능한가요?

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!

cwryu의 이미지

svk mirror ...

git svn init ...

이런 툴 없어도 리비전 다 받는 건 뻔한 작업인데 어떤 산업스파이가 이걸 수동으로 하고 앉아 있습니까.

cshong의 이미지

제가 잘 몰라서 그러는데..
그러면 subversion에 별다른 설정 없이 클라이언트측에서 svk나 git를 설치만 하면 가능하다는 건가요?

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!

danskesb의 이미지

* http://utsl.gen.nz/talks/git-svn/intro.html
* http://www.kernel.org/pub/software/scm/git/docs/git-svn.html
* http://flavio.castelli.name/howto_use_git_with_svn

뭐 그런 거죠.

버전 관리 시스템보다는 전체적인 시스템 및 인적 자원을 신경쓰시는 게 나을 것 같다고 조심스럽게 제안합니다. 뛰는 놈 위에 나는 놈 얼마든지 있습니다.

---- 절취선 ----
http://blog.peremen.name

feanor의 이미지

네. svk나 git 갈 것도 없이 subversion 클라이언트 자체에 svnsync라고 리비전 하나씩 받아서 히스토리 전체를 재구성하는 툴이 있습니다.

cshong의 이미지

혹시 svnsync의 copy-revprops 커맨드가 맞나요? 이건 리비전 하나씩 하나씩 받아야 하는거 맞습니까? mercurial의 clone과 같이 한번에 복사할 수도 있는지 찾아봐도 그런 커맨드는 없는것 같습니다.

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!

cshong의 이미지

subversion으로 저장소를 운영하면 리비전을 하나씩만 받을 수 있는줄 알았는데 그게 아니였군요. 이부분에 대해서 전혀 몰랐기에 이 문제는 다시 생각을 해봐야겠습니다. 덕분에 하나 배웠습니다. : )

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!

cshong의 이미지

한가지 방법이 생각났는데 subversion 오픈소스이니 svnsync를 사용하지 못하도록 코드를 수정해 사용하는 방법도 있을 것 같네요.
덧) 아.. 이렇게 사용한다해도 여전히 svk, git-svn도 있는데.. 역시 같은 방법으로 코드 수정을 하면 되는거겠죠?

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!

cwryu의 이미지

그런 툴은 서버에 "나는 syncsync/svk다"라고 알려주면서 받는 게 아니라 리비전을 하나씩 받는 동작을 반복해서 다 받는 겁니다. 일반적인 svn 사용과 구분이 안 됩니다. 방법 없어요.

그런 툴 없이도 쉽게 생각해 봐도 현재 리비전 N을 확인한 다음에 -r1부터 -rN까지 스크립트로 돌려서 다 받아도 됩니다. 용량이 좀 부담되면 -r1:2, -r2:3, ... diff만 다 받아도 되고요.

danskesb의 이미지

진짜로 걱정이 되신다면 그냥 SCM을 쓰시지 마시고 어디 숨겨 둔 서버에다가 코드 스냅샷을 .tar.gz 같은 포맷으로 압축해 보관하시는 것을 추천합니다. 아니면 퍼포스라는 상용 리비전 컨트롤 시스템이 님께서 원할지도 모르는 액세스 컨트롤을 지원하는 것 같더라고요. 또한 퍼포스는 액세스 로그를 남기는 것 같군요. 이 정도면 대량 체크아웃 잡아낼 수 있겠죠. :) FreeBSD 및 Qt(최근 Git로 전환했습니다)가 퍼포스를 사용하거나 사용했습니다.

보안이 '진짜로' 이루어지는 회사라면, svn이든 머큐리얼이든 비주얼 소스세이프든 코드 저장하는 서버를 인터넷에 무방비로 연결시키지는 않을 겁니다.

* http://www.perforce.com

---- 절취선 ----
http://blog.peremen.name

youlsa의 이미지

Quote:
보안이 '진짜로' 이루어지는 회사라면, svn이든 머큐리얼이든 비주얼 소스세이프든 코드 저장하는 서버를 인터넷에 무방비로 연결시키지는 않을 겁니다.

뜨끔... -_-;;;

=-=-=-=-=-=-=-=-=
http://youlsa.com

=-=-=-=-=-=-=-=-=
http://youlsa.com

tinywolf의 이미지

그렇죠. 보통 해당 서버를 내부에서만 접근 가능하게 방화벽으로 막아버립니다.

더 중요하게 보호되어야해서 어떻게든 방법이 필요하다면,
상용소프트웨어 업체들에게 기능을 제안하고 구입해서 사용하시는 것도 좋을듯합니다.

하지만 어떤 시스템이 되었든 앞에서 제기하신 것처럼 내부에 들어와서 가져가려들면..
그 때는 서버의 보안 역할 범위를 벗어난 것같습니다.
근본적으로 출입자들이 무엇을 가지고 들락날락거리는지를 철저하게 감시해야겠지요.

ㅡ_ㅡ;

cshong의 이미지

현재까지의 토론들을 참고로해서 다음과 같이 설정하고 방법을 찾아 보려합니다.

1. 외부접근 차단.
2. 내부에서도 서버에 직접 접근하는게 아니라 subversion 프로토콜로만 접근을 허용

이런 상황이라면 내부인에 의해서 누출되는 문제만 관리하면 되는데 문제가 발생했을때 그 피해를 최소한으로 하기 위해서 고민하고 있습니다. 위에도 언급되었지만 저는 다음과 같이 알고 있었습니다.

1. subversion은 유출되는 그 시점에서 많아봐야 몇개에서 수십개의 리비전이 유출
(물론 모든 저장소 이력이 유출될수 있지만 저장소의 리비전이 아주 많다고 가정했을 경우 일일이 하기에는 시간이 너무 많이 소요되어 적발될 가능성이 증가)
2. 그에 반해 mucurial은 개발이력과 모든 리비전이 담긴 저장소가 통채로 유출

이게 전부가 아니더군요. subversion도 svnsync를 이용해서 저장소를 통채로 가져올 수 있다는 것을 알았습니다. 그래서 subversion 소스를 직접 수정하여 svnsync를 막을려고 한 것이고, 이렇게 한다면 mucurial도 소스를 직접 수정하여 가능하며 상용소프트웨어 업체에 의뢰해 개발해 사용하는 방법도 가능하다는 생각을 했습니다. 하지만.. 모든 작업은 비용이 발생함으로 전부 고려할 수는 없네요.

여기까지가 현재 상황이고 선택을 해야 할 것 같습니다. 한 말씀 남겨주신 분들 진심으로 감사드립니다. :-)

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!

================================
생각만 해서는 아무것도 이룰 수 없다.. 행동하라!!