[Git] Gitolite 설치

Project 2017. 3. 21. 13:40
반응형

GIT 서버 구축,

 

참, 만만하게 볼 건 없는 것 같다. GIT은 쉬운 툴이고 사용하기도 편리하다는 GIT의 소개와는 달리,

머가 참 구축하기 힘든지....

 

GIT 서버를 구축하면서 현재 당면한 어려움은 인증 부분인 것 같다.( 머 이상이 있는 데, 정확한 분석은 되지 않고,

두리뭉실 "인증 부분이 잘 안되는 건가봐"라는 생각을 하고 있다.)

 

몇 번 설치하고 제거하고를 반복 하면서, 인증 메커니즘에 이해가 되려고 한다.

다시 한 번 시도하여 성공적인 소스서버를 구축하리라!!!

 

 

1. GIT 설치, GITOLITE 설치

 

  우선 GIT 서버 관리는 Gitolite를 이용하여 하려고 한다.

 

  준비된 서버의 OS는 Ubuntu이다.

 

    $ cat /etc/*-release | uniq

  버전 정보가 출력된다.

 

  설치된 버전은 Ubuntu 12.04.4 LTS이다.

 

  GIT 설치는 다음과 같이 한다.

 

    $ sudo apt-get install git-core

 

  버전 확인은 다음과 같이 한다.

 

    $ git --version

 

  현재 설치된 버전은 1.7.9.5가 설치되어 있다. 현재 1.8.5.3.까지 나온 것으로 알려져 있지만, Ubuntu에서는 배포판으로 1.7.9.5 버전을 사용하는 것으로 보인다.

 

  Git을 처음 설치하면, 사용자 정보를 입력해야 한다.

 

    $ git config --global user.name "Warren Beon"

    $ git config --global user.email warren@2x4soft.com

 

    * 이름과 이메일 주소는 각자 자신의 것을 사용한다.

 

 

2. Git 계정 생성

 

  이 챕터는 Gitolite설치/설정에 대해 꽤나 잘 나와있는 블로그에서 발췌했다.

  (펌: http://whatwant.tistory.com/331)

 

 

  Git의 Repository를 운영하기 위한 계정을 생성을 한다: git-repo

  Gitolite를 관리하기 위한 관리자 계정을 생성한다: git-admin

 

    (작업 계정)

    $ sudo adduser git-repo

    $ sudo adduser git-admin

 

  SSH 환경에서 여러 개발자들을 지원해 주기 위해서는 Linux 계정을 그 숫자 만큼 만들어 줘야 한다.

  이 방법은 대표 계정을 만들고, 여러 사용자를 지원하기 위한 방법이다.

 

  현재 작업 중인 계정에서 다른 계정에 접근하기 위해 SSH의 Public-key를 등록한다.

  Git과 무관하게 git-repo, git-admin에 쉽게 접근하기 위해서 하는 작업이다.

 

    (작업 계정)

    $ ssh-keygen (: 키 생성, 암호를 넣지 않는다!!)

 

    $ ssh-copy-id -i ~/.ssh/id_rsa.pub git-repo@localhost (: 키등록)

    $ ssh-copy-id -i ~/.ssh/id_rsa.pub git-admin@localhost (: 키등록)

 

 

3. Gitolite 다운로드 및 설치

 

  Gitolite설치는 repository를 저장하는 git-repo 계정에 설치를 한다.

 

    (작업 계정)

    $ ssh git-repo@localhost (: git-repo 계정으로 진입)

 

    (git-repo 계정)

    $ git clone https://github.com/sitaramc/gitolite.git (: 다운로드 gitolite)

    $ ./gitolite/install (: 설치)

 

  Gitolite의 관리자 계정의 공개키가 필요하다. 따라서 git-admin을 gitolite의 관리자 계정용으로 만들어 놓았고,

  git-admin에서 키를 생성한다.

 

    (git-admin 계정)

    $ ssh-keygen

 

    $ scp ~/.ssh/id_rsa.pub git-repo@localhost:/home/git-repo/.ssh/git-admin.pub

 

  git-admin의 공개키를 git-repo계정으로 전송한다.

 

  전송이 완료되었으며, gitolite setup을 수행시킨다.

 

    (git-repo 계정)

    $ ./gitolite/src/gitolite setup -pk ./.ssh/git-admin.pub

 

  위와 같이 수행하면,

  /home/git-repo/repositories라는 폴더가 생성되며, 폴더 내부에 gitolite-admin.git이라는 저장소가 생성된다.

 

  gitolite의 설정은 설정용 저장소를 만드는 것이고 gitolite의 gitolite-admin.git 저장소의 내용을 수정하고 Push하여 Gitolite를 설정을 한다.

 

  따라서 gitolite의 설정은 gitolite를 관리용으로 만든 계정 git-admin에서 설정을 하게된다.

 

  git-admin계정으로 login하여 gitolite-admin.git 저장소를 clone해 본다.

 

    (git-admin 계정)

    $ cd

    $ mkdir repositories

    $ cd repositories

    $ git clone git-repo@localhost:/gitolite-admin.git

 

 

<레퍼런스>

  - http://whatwant.tistory.com/331

  - git-scm.com/book/ : git-scm에서 제공하는 git 설명서

 

 

 

 

 

 

 

 

 출처 : http://blog.daum.net/un4given/17

블로그 이미지

KuroNeko_

KuroNeko

,
반응형

전에 하던 SSDT 후킹은 64비트에서 실패해버렸고..



먼저 다른 기능을 구현하자고 해서 지금 만들고 있는게,


File/Folder Open history Logger 인데.. 처음에는 간단하게 Global Hooking을 해서 저장하려고 했다.


근데 더 좋은 방법이 떠올랐는데 그게 바로 Filter Driver 가 되겠다.



WDK를 설치했으면 아마도 File Mini Filter라고 visual studio에 생겼을 건데 그 템플릿을 토대로 소스코드를 짜기 시작했다만,


일단 기능은 구현은 끝내놨었다. 근데 문제가 드라이버와 User-mode Application과의 통신이였는데,


가뜩이나 네트워크 공부는 안해놨었고 IOCP는 개념만 알고 있었고(통신하는데 IOCP가 쓰인단다;;)


오늘 하루 아주 커널 드라이버와 통신으로 내 멘탈을 아작 내버렸다.


여차저차 해서 결국 구현하긴 했다만 이걸 또 클래스화 시켜서 확장이 쉽게 하도록 할 계획이다.

블로그 이미지

KuroNeko_

KuroNeko

,
반응형

드디어 기본적인 틀은 다짰다.


이걸 어떻게 x64로 적용할지가 문제긴 한데 일단 x86을 먼저 시도해놨으니까 괜찮지 않을까 싶다.


ZwCreateThreadEx함수에서 ProcessHandle이 -1 이거나 커널영역의 핸들일 경우는 그냥 보내주고


아닐 때만 판별해낸다.


아래는 결과적으로 만든 드라이버 소스다.





블로그 이미지

KuroNeko_

KuroNeko

,
반응형

어제 말했던 건 한 90정도는 된거 같은데 문제가 있다,


커널 함수을 모르니까 내가 원하는 방식으로 되질않는다.


분명 HANDLE 가지고 PID를 구하거나 반대도 될 텐데.. 어떻게 해야할지 구글링해도 자세히 안나와 있고


DbgPrint만 더럽게 사용하고 있다.


일단 내일도 한번 삽질 계속 해봐야지


공부 중인 링크


http://driverentry.tistory.com/entry/%ED%8E%8C-HANDLE%EC%97%90-%EB%8C%80%ED%95%9C-%ED%83%90%EA%B5%AC-%EC%B2%AB%EB%B2%88%EC%A7%B8-%EC%8B%9C%EA%B0%84

블로그 이미지

KuroNeko_

KuroNeko

,
반응형

오늘 역시 삽질을 해버렸다.


내가 처음 구현했던 방식은 이전 게시글을 바탕으로 아예 CreateRemoteThread를 막아버리는 거였는데,


그렇게 하면 ZwCreateRemoteThread 함수로 Wrapping되어있기 때문에 판별하는 방법이 한정된다.


그래서 나는 아래와 같은 코드로 구현을 해봤었다.



if ((DWORD)ProcessHandle == 0xffffffff){
	DbgPrint("Call Original ZwCreateThreadEx");
	return OrgZwCreateThreadEx(ThreadHandle, DesiredAccess, ObjectAttributes, ProcessHandle,
			StartRoutine, Argument, CreateFlags, ZeroBits, StackSize, MaximumStackSize, AttributeList);
}

return STATUS_UNSUCCESSFUL;


하지만 어째선지 다른 RTL 계 함수들이 호출되는 걸 볼 수 있었고, 나중에는 결국 뻑 나가게 된다.


그래서 그냥 Argument 안에 .dll이 있는지 없는지만 검사를 해서 넘겨줬지만,


그마저도 RemoteThread에서 다른 프로세스의 값을 읽어야되는 상태가 되버려서 뻑 나가게 되버렸다.


결국 나는 아래와 같이 구현하려고 생각한다.


먼저 ZwQuerySystemInformation 함수를 호출해서 해당 인젝션 당하는 프로세스의 정보를 얻어와


PsLookupProcessByProcessId 함수를 통해 EPROCESS를 얻어온다.


그 EPROCESS를 기반으로 그 프로세스를 Attach해서 인자값을 읽어와 .dll이 포함되있다면 무시하도록 한다.


결론, 아직 구현은 못했다 내일 아마 해야할듯;;


아 참, 커널에서 힙을 할당하는 건 ExAllocatePool를 사용하면 된다.


ex)

PVOID proc = ExAllocatePool(NonPagedPool, sizeof(struct _SYSTEM_PROCESSES) * 10);

블로그 이미지

KuroNeko_

KuroNeko

,
반응형

최근 간단하게 행위 기반 탐지로 프로젝트를 잡고 구현중에 있는데,


처음 진행할 건 DLL Injection을 막는 것, 이건 32bit 환경에선 SSDT 후킹을 통해서 진행하려고 한다.


별 다른건 없으니 진행하도록 하겠다.





DLL Injection을 탐지하는 방법을 생각해본 결과 아래와 같이 4가지 정도가 있었다.


1. CreateRemoteThread, WriteProcessMemory 등의 함수 글로벌 후킹


2. IDT 참조 후 실제 프로세스에서 사용중인 DLL과 비교


3. 현재 로딩된 DLL을 리스트로 잡아놓고 비교


4. SSDT 후킹으로 ZwCreateThreadEx 변경





현재 2, 3번은 구현을 완료했고 별건 없었다.


1번도 간단하게 제작 가능하다만, 문제는 4번이였다.


스레드를 생성하는 함수는 CreateThread(Ex), CreateRemoteThread(Ex) 이런게 있는데


CreateThread나 CreateRemoteThread나 각각 Ex함수로 Wrapping되버리고


Ex함수들은 ZwCreateThreadEx함수를 호출하게 된다.


CreateThread가 CreateThreadEx로 Wrapping되버려 Ex의 다른 인자값인 다른 프로세스의 핸들이 없다.


그 때문에 0xFFFFFFFF 로 넣어주고 호출해준다.


CreateRemoteThread는 핸들이 있으니 그 핸들을 넣어주고 호출해줌.

'Project' 카테고리의 다른 글

[행위기반탐지] 삽질2  (0) 2017.02.01
[행위기반탐지] 삽질 1  (0) 2017.01.31
[Project] Console Web  (0) 2016.05.18
[Project] Interpret Nyan  (0) 2016.03.13
Project_1 :: iptime 펌웨어 뜯어보기  (1) 2014.11.21
블로그 이미지

KuroNeko_

KuroNeko

,

[Project] Console Web

Project 2016. 5. 18. 18:00
반응형

휴가 중에 그냥 번뜩여서 만들어봤는데 효율은 똥이지만 나중에 다시 나와서 수정계속 해야겠당


Console Web.zip


블로그 이미지

KuroNeko_

KuroNeko

,

[Project] Interpret Nyan

Project 2016. 3. 13. 19:44
반응형

군대에서 너무 할게 없는 와중에 인터프리터를 만들어보자고 생각하고 한 일주일정도 지나서 print명령어를 만들었는데 미흡한 부분이 많다.

물론 심심해서 만드는 거기 때문에 성능은 보장못한다ㅋㅋㅋㅋㅋ



아직 함수와 포인터 부분을 구현하지 않았지만 나중에 점점 추가할 예정이다.


사용 방법은 아래와 같다.

#include <iostream>

#include "interpret"


using namespace std;


int main(){

    translator N("ReadFile");

    N.interpret();


    return 0;

}


ReadFile 내용

print "Neko_Plus__:3" + "NekoP" + " This is My Language Nyan"

print "HAHA! ++ || ))"

블로그 이미지

KuroNeko_

KuroNeko

,