Geth를 처음 시작하면 네트워크 내의 다른 이더리움 클라이언트(노드node라고도 불림)에 연결하는 작업을 먼저 시작하고 블록체인의 전체 사본을 내려받게 된다.
Geth는블록체인의 복사본을 최신 상태로 유지하기 위해 끊임없이 다른 노드와 통신한다. 또한 블록을 채굴하고, 블록체인에 트랜잭션을 추가하고 블록의 트랜잭션을 검증하며 트랜잭션을 실행할 수도 있다. 그리고 RPC를 통해 상호작용할 수 있는 API를 노출하여 서버 역할을 하기도 한다.
Parity
패리티(Parity)는 이더리움 프로토콜의 또 다른 구현체이며, 러스트(Rust) 프로그래밍 언어로 개발되었다. 현재 Parity Inc. 라는 기업에서 운영하고 있다.
이더리움 네트워크에 접속할 수 있는 클라이언트 소프트웨어를 개발하는 길은 누구에게나 열려 있으며, C++, 파이썬 및 다른 언어로 작성된 클라이언트도 있다.
위 2개의 이더리움 프로토콜에 대해서 개발자의 측면에서 설치하고 통신하는 법을 설명해보겠다. (리눅스 기반)
코인거래소에서 일해본 개발자라면 알듯이 코인을 상장하려면 아래의 과정을 따라야 한다.
1. 해당 코인의 RPC API를 지원하는 소프트웨어를 확인하고 그것을 서버 PC에 설치
2. 그 소프트웨어를 알맞은 명령어를 입력하여 실행하여, 지갑 저장 디렉토리, 체인 db 디렉토리를 설정
(실행 명령어는 보통 bitcoind, parity, geth 등 simple함.)
3. 블록 syncing이 정상적으로 완료되면, 직접 코딩하거나 RPC 라이브러리를 활용하여 서버 PC의 해당 port에 연결
4. 정상적으로 통신이 되면 Web3j같은 RPC 라이브러리에서 제공하는 명령어를 통하여 입출금, 잔액 조회 등의 행동을 함
- 침입탐지시스템(IDS, Intrusion Detection System)은 ID 절차를 자동화하기 위해 이벤트를 수집, 분석, 처리, 저장하기 위한 기능을 수행한다.
• IDS는 다음과 같은 공통적인 기능들을 수행한다.
- 식별된 이벤트와 관련한 정보를 기록한다. - 식별된 이벤트 중 중요도에 따라 관리자에게 공지한다. - 특정 기간, 조건을 기반으로한 보고서를 생성한다.
- 침입방지시스템(IPS, Intrusion Prevention System)은 IDS의 기능과 더불어 식별된 이벤트를 처리 후 차단하는 기능을 수행한다.
2. Snort
- 시그니처 기반 NIDS의 엔진으로 사용되는 대표적인 오픈소스이다. \
- IDS가 수행해야할 기능들에 대한 구성 요소를 포함한다.
- 네트워크 데이터에 대한 수집, 해석, 전처리, 탐지, 로깅, 처리, 저장 등의 기능을 보유한다.
- 주요 기능들을 디코더, 탐지 엔진에 의해 처리한다.
- 탐지 엔진은 정의된 룰셋에 의해 패킷 데이터를 식별, 탐지 후 이벤트를 생성, 로깅한다.
• Snort의 구성은 스니퍼, 패킷 로거, NIDS 모드로 구분한다.
• 스니퍼 모드는 네트워크 데이터를 수집하고 데이터 스트림을 출력한다.
• 패킷 로거 모드는 Snort가 설치된 NIDS 시스템의 하드디스크에 패킷을 기록한다.
• NIDS 모드는 사용자 기반의 룰셋에 의한 네트워크 데이터를 분석하고 처리한다.
3. 스위치와 라우터
- L2 Ethernet Header를 참조해서 스위칭 하는 장비를 스위치라고 하며 L3 IP Header를 참조해서 스위칭하는 장비를 라우터라고 함.
- 스위치의 성능이 좋아져 IP Packet을 스위칭하게되는데 이를 L3 스위치라고 함. (라우터와 동일)
4. 방화벽 (firewall)
• 방화벽은 네트워크나 호스트 간 네트워크 트래픽 흐름을 통제하거나 모니터링하는 시스템이다. • 조직의 정보는 대부분 컴퓨터에 저장되기에 정보 보안을 위해 불법적인 접근을 차단해야 한다.
• 방화벽은 단일 시스템을 기준으로 외부 인터넷에서의 접근을 제한시키는 것이 사용 목적이다.
• 조직은 외부와 내부 네트워크 사이에 방화벽을 설치함으로 불필요하거나 악의적인 트래픽을 거부 혹은 차단한다.
• 방화벽의 기능은 접근 통제, 사용자 인증, 감사 및 로그, 프록시, 주소 변환 등을 보유한다.
• 방화벽은 침입 차단의 대상 네트워크 계층에 아래와 같이 분류 할 수 있다. - 패킷 필터 방화벽(Packet Filtering Firewall)
- 상태 기반 패킷 검사 방화벽(Stateful Packet Inspection Firewall)
- 애플리케이션 수준 방화벽 - 프록시 서버(Proxy-Server)
- 회선-레벨 게이트웨이(Circuit-level Gateway)
방화벽 솔루션 예) Forty gate 등 다수
프록시(Proxy) 란?
프록시란 ‘대리'라는 뜻을 가지고 있는데, 네트워크 기술에서는 프로토콜에 있어서 대리 응답 등을 행하는 개념이다. 보안 분야에서 주로 보안상의 이유로 직접 통신할 수 없는 두 점 사이에서 통신을 할 경우 그 사이에서 중계기로서 대리로 통신을 수행하는 기능을 가리켜 ‘프록시(Proxy)’, 그 중계 기능을 하는 것을 “프록시 서버(Proxy Server)라고 한다.
- Firewall, VPN, IPS, Anti-virus, Anti-DDoS, 웹필터링 등 다양한 보안기능을 단일 어플라이언스 형태로 통합하여 관리 복잡성을 최소화하고 복합적인 위협요소를 효율적으로 방어하기 위한 통합보안 솔루션
- 여러 기능을 수행함으로써 관리의 편의성과 관리비용의 절감을 가져오는 장점이 있는 반면 단일 전용 장비 대비 기능과 성능, 신뢰성에 대한 이슈가 요구 된다.
- 단순히 비인가 IP 차단 뿐만 아니라 침입방지시스템(IPS) 기능까지 지원하고 해킹에 대한 탐지, 차단 역할도 수행하게 되며, 이외에도 애플리케이션 필터링, URL 필터링, 안티바이러스(네트워크) 등의 보안 기능을 탑재하고 있다.
솔루션 예: MF2
UTM의 주요 기능
2. WAF (Web Application Firewall)
• 웹 방화벽은 일반적인 네트워크 방화벽(Firewall)과는 달리 웹 애플리케이션 보안에 특화되어 개발된 솔루션을 의미한다.
• 웹 방화벽의 기본 역할은 그 이름에서도 알 수 있듯, SQL Injection, Cross-Site Scripting(XSS)등과 같은 웹 공격을 탐지하고 차단하는 것이다.
• 최근의 웹 방화벽은 직접적인 웹 공격 대응 이 외에도, 정보유출 방지 솔루션, 부정 로그인 방지 솔루션, 웹 사이트 위변조 방지 솔루션 등으로 여러가지 기능을 가지고 있다.
솔루션 예) MOD Security
3. DLP (data Loss Prevention)
• 기업 구성원과 프로세스, 기술의 결합을 통해 고객 또는 직원에 대한 개인 신원확인 정보(PII), 재무제표, 마케팅 계획과 같은 기업 정보, 제품 계획, 소스 코드와 같은 지적재산(IP)을 포함하는 기밀 정보 등이 기업 밖으로 유출되는 것을 방지하기 위한 솔루션이다.
• 최근 여러 가지 정보 유출 사건이 언론을 통해 알려지면서 정보 손실 방지에 대한 중요성이 대두 되었으며, DLP는 IT 보안만의 문제가 아닌 기업 경영진의 선결과제로 부각되고 있다.
• 외부의 악의적인 공격으로 인해 정보가 손실되는 경우도 있지만 일반 직원들의 부주의와 기업 프로세스 위반이 원인이 되어 정보가 손실되는 경우가 더 많다.
PII(Personally Identifiable Information)란? PII는 개인을 식별할 수 있는 정보를 의미하는데, 나 자신을 증명할 수 있는 이름, 주소, 주민번호, 운전면허 번호, 지문 정보, 신용카드 번호, 생일, 유전자 정보, 전화번호와 같은 정보가 이에 해당한다.
IP(Intellectual Property rights)란? 지식 재산권 또는 지적 재산권을 의미하는 IP는 인간의 창조적 활동 또는 경험 등을 통해 창출하거나 발견한 지식, 정보, 기술이나 표현, 표시 그 밖의 무형적인 것으로서 재산적 가치가 실현될 수 있는 지적창작물에 부여된 재산에 관한 권리를 의미한다.
솔루션 예) Somansa, Saferzone
DLP 솔루션의 목적
1. 개인 정보 보호
2. 지적 재산권 보호
3. 정보의 가시성 - DLP는 엔드포인트, 네트워크 및 클라우드에서 정보의 이동을 읽고 추적할 수 있도록 해준다.
DLP와 DRM과의 차이점
4. APT 솔루션
시그니처 기반으로 탐지되지 않는 고도화된 공격, 즉 제로데이 공격같이 패턴이 아직 업로드 되지 않았거나, 알려지지 않은 공격에는 취약할 수밖에 없다. 그래서 등장한 제품이 APT 대응 솔루션이다.
• APT 솔루션은 신종 APT/악성코드 공격을 탐지/방어하는 솔루션으로 최근 발생하고 있는 랜섬웨어, 자료 유출 사고, 네트워크 마비 등 보안 사고를 미연에 방지하기 위한 정보 보안 시스템이다.
• 사용자단의 행위 기반 방어 제품(EDR)과 네트워크 패킷 분석 기능을 연계로 사용하여 오탐을 최소화하고 정확한 탐지 및 대응을 하는 것이 목적이다.
APT 솔루션의 대응 방법
• 네트워크 APT 대응 솔루션은 네트워크 영역에서 완성된 파일이나 데이터를 확인하기 어렵기 때문에 평소의 활동과 비교하거나 네트워크 접속 유형, C&C 서버와의 통신, APT 감염 사이트 접속 등을 분석하는 형태로 탐지를 진행한다.
• Email APT 대응 솔루션은 APT 공격의 주요 침입로로 이메일이 활용되고 있는 점에서 착안해 이메일 보안에 특화된 기능을 제공한다. 보통 이메일 보안 솔루션 독자적으로 또는 전문 장비와 연동해 탐지율을 높이는 방법으로 이메일을 통해 내부로 유입되는 악성코드 및 유해 요소를 차단한다.
• Endpoint APT 대응 솔루션은 주로 안티바이러스(Anti Virus)를 통해 운영된다. 기본적인 골자는 패턴과 시그니처 기반의 백신과 큰 차이 없으나 APT를 고려한 기능이 추가돼 있다. 그 기능으로 동적 분석 기술과 C&C 서버 통신 차단 등의 기능을 대표적으로 꼽을 수 있다.
5. ESM 솔루션
Enterprise Security Management(기업 보안 관리)의 약자로, 기업과 기관의 보안정책을 반영, 다양한 보안시스템을 관제, 운영, 관리함으로써 조직의 보안목적을 효율적으로 실현시키는 시스템이다.
• 방화벽, 침입 탐지 시스템, 가상 사설망 등의 여러 보안 시스템으로부터 발생한 각종 이벤트를 관리, 분석, 통보 대응 및 보안 정책을 등이 여기에 포함된다
• 또한 기업이 보유한 IT 보안 인프라에 대해 가용성, 무결성, 보안성을 보장하기 위한 전사적인 보안관리 시스템이기도 하다.
ESM 솔루션의 주요 기능
ESM 솔루션 – 도입 효과
• 각종 보안 솔루션의 알람 및 로그 정보를 중앙 집중화 된 시스템에서 통합관제 및 관리하여, 보안 시스템 관리의 효율성 증대
• 소수의 특정 관리 인원을 할당하여 관리를 담당하게 할 수 있어 비용 효율적인 보안 관리 가능
• 보안 관리자의 교육 시간과 숙달 시간을 최소화
• 각종 로그 정보에 대한 통합 관리를 통해 사전 예방책 마련 가능
• 통계 처리 기능을 이용하여 주기적인 시스템 상태 분석 가능
• 표준화된 보안관리 정책/절차의 수립
• 문제 발생 후 사후조치에서 예방적인 보안관리 체계로의 수립
6. SIM (Security Information and Event Management)
•빅데이터의 방대한 정보 속에서 단순한 로그 수집 및 분석이 아닌 사후에 추적 등이 가능하도록 상관분석과 포렌식 기능을 제공해주는 지능적 위협에 대한 조기 경고 모니터링 체계이다.
• 기존의 ESM(Enterprise Security Management)의 역할을 보안 영역에서 기업 전반으로 확대시키고, 기업 컴플라이언스 대응 기능을 추가하였다.
• 기업 내 정보시스템의 보안 정보 및 이벤트 관리를 통해 내부 및 외부 위협을 모니터링 함으로써 외부의 공격은 물론, 내부 정보유출 또한 방지한다.
• 네트워크, 하드웨어 및 응용 프로그램에 의해 생성된 보안 경고의 실시간 분석이 가능하다.
SIM 솔루션의 필요성
• 기업의 보안정책 중 외부 해킹 공격에 대한 효과적인 차단과 탐지, 모니터링 등의 전체 운영관리, 심층분석, 대규모 확장성, 통합 뷰의 관한 니즈가 증대하였다.
• 매일 생성되는 빅데이터급의 로그 증가로 인한 효율적인 로그 관리 및 분석이 필요해졌다.
• 최근 외부 해킹으로 대량의 개인정보 유출 및 대규모 시스템 장애 사고가 빈번히 발생하는데, ESM과 같은 보안 체계는 APT(Advanced Persistent Threat) 공격 같은 장기적이고 지속적인 특정 표적대상 공격에는 대책 없이 피해가 발생하며 사회공학적 해킹(Social Engineering Hacking)도 함께 동원하기 때문에 사전 탐지가 어려운 상황이다.
@RequestMapping("/contentView")
public String contentView(HttpServletRequest request, Model model) {
System.out.println("-------- contentView() 호출 ----------");
model.addAttribute("request", request);
//HttpServletRequest로 전 전 페이지 정보를 가져와 request에 저장함.
cmd = new ContentCmd(); //bbsCommand에 ContentCmd를 불러와 cmd에 저장
cmd.service(model);//model 파라미터를 service메소드에 넣어서 동작
return "contentView";
}
2. list.jsp 파일 수정
위의 ContentCmd.java를 만들어 주기 전에 리스트 페이지를 수정한다.
테이블 안에서 내용을 보여주는 td태그 안의 내용만 수정한다.
<table border="1" cellpadding="0" cellspacing="0" width="500">
<tr>
<td>번호</td>
<td>제목</td>
<td>작성자</td>
<td>날짜</td>
<td>조회수</td>
</tr>
<!-- 게시글 목록 가져오기 -->
<c:forEach items="${list}" var="vo">
<!-- ListCmd에서 만들었던 모델 list를 컨트롤러를 통해 받아온다.-->
<tr>
<td>${vo.bNo}</td>
<!-- 제목을 클릭하면 페이지가 넘어가면서 번호 정보를 가져온다. -->
<td><a href="contentView?bNo=${vo.bNo}">${vo.bSubject}</a></td>
<td>${vo.bName}</td>
<td>${vo.bDate}</td>
<td>${vo.bHit}</td>
</tr>
</c:forEach>
<tr>
<td colspan="5" align="center"><a href="writeForm">글쓰기</a></td>
</tr>
</table>
3. Cmd 작성
bbsCommand 패키지에 ContentCmd.java 파일을 생성
그 뒤 아래의 코드를 입력
ContentCmd.java
package com.spring.bbsCommand;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.ui.Model;
import com.spring.bbsDAO.BDAO;
import com.spring.bbsVO.BVO;
public class ContentCmd implements Bcmd {
@Override
public void service(Model model) {
//모델을 받아 맵형태로 바꿔줌.
Map<String, Object> map = model.asMap();
//1번글을 클릭하면 1번, 2번글을 클릭하면 2번을 전달받아야 함. 컨트롤러의 리퀘스트가 맵안에 있다. 이것을 HttpServletRequest로 저장
HttpServletRequest request = (HttpServletRequest)map.get("request");
String bNo = request.getParameter("bNo");
//dao 불러오기
BDAO dao = new BDAO();
//조회수증가와 내용가져옴
BVO bVo = dao.contentView(bNo);
//모델에 추가
model.addAttribute("contentView", bVo);
}
}
4. BDAO에 contentView 추가
위에서 dao의 contentview() 메소드를 사용하였으므로 BDAO에 그 메소드를 정의해줘야한다.
2) com.mysql.persistence에 memberDAOImpl.java를 생성하여 아래 코드들을 넣는다.
MemberDAOImpl.java
package com.mysql.persistence;
import org.springframework.stereotype.Repository;
import com.mysql.domain.MemberVO;
@Repository
public class MemberDAOImpl extends GenericDAOImpl<MemberVO, String> implements MemberDAO {
}
3) com.mysql.persistence에 GenericDAO.java를 생성하여 아래 코드들을 넣는다.
GenericDAO.java
package com.mysql.persistence;
import java.util.List;
public interface GenericDAO<E, K> {
public K getTime();
public void register(E vo);
public E get(K userid);
public List<E> getList();
// 아래는 등록, 조회 구현 이후에 할 것임..
//public void update();
//public void delete();
}// interface
4) com.mysql.persistence에 GenericDAOImpl.java를 생성하여 아래 코드들을 넣는다.
GenericDAOImpl.java
package com.mysql.persistence;
import java.util.List;
import javax.inject.Inject;
import org.apache.ibatis.session.SqlSession;
// GenericDAO 인터페이스의 추상클래스들을 오버라이딩 해주어야 한다.
// 즉, 여기서 DB와 연결을 하고 SQL문을 처리해주어야 하므로 sessionTemplate을 인스턴스 변수로 갖고서
// 이를 통해 CRUD 작업을 처리해주면 된다.
public abstract class GenericDAOImpl<E, K> implements GenericDAO<E, K> {
@Inject
private SqlSession sqlSession;
private static final String namespace =
"com.mysql.mapper.MemberMapper";
@Override
public K getTime() {
return sqlSession.selectOne(namespace + ".getNow");
}
@Override
public void register(E vo) {
sqlSession.insert(namespace + ".register", vo);
}
@Override
public E get(K userid) {
return sqlSession.selectOne(namespace + ".get", userid);
}
@Override
public List<E> getList() {
return sqlSession.selectList(namespace + ".getList");
}
}// class
5) com.mysql.persistence에 TimeDao.java를 생성하여 아래 코드들을 넣는다.