IT 관리자를 위한 필수 응급처치법


MS SQL 서버의 메모리가 부족해요!


박상옥|호스트웨이코리아 시스템 팀


MS SQL 서버의 메모리가 부족해요! MS SQL을 꾸준히 다뤄 온 시스템 관리자라면 한번쯤은 메모리가 부족하다는 에러 메시지를 경험해봤을 것이다. 그러나 무작정 시스템 사양을 늘릴 수만도 없는 노릇. 그렇다면 어떻게 대처하는 것이 비용과 업무량 면에서 효율적일까. 이번 호에는 SQL 관련 메모리 문제에 부딪혔을 때 이를 해결하는 방법을 살펴보고 그 방지책으로 SQL 서버 부하를 모니터링하는 방법을 알아본다.


A사는 게임 사이트의 DB 서버를 물리 메모리 2GB로 새로 구축했다. 그러나 얼마 지나지 않아 MS SQL 서비스가 메모리를 모두 사용해 여유 메모리가 남지 않는 상황에 몰리게 됐다. 결국 시스템 관리자는 메모리 추가를 요청했지만 메모리 업그레이드는 불가능했다. 해당 서버는 윈도우 2000 서버 운영체제에 MS SQL 서버 2000을 사용했기 때문에 물리적으로는 더 이상 메모리를 증설할 수 없었기 때문이다.


이처럼 MS SQL 서버를 사용하는 기업 가운데 메모리 부족 현상을 경험하는 경우가 종종 있다. 작업관리자에서 확인해보면 Sqlservr.exe 프로세스가 메모리를 모두 점유하고 있어 메모리가 부족해진 것이다. 그렇다면 이런 경우 시스템 관리자는 어떻게 대처해야 할까.


일반적으로 MS SQL 서버 2000을 설치한 후 기본 구성 그대로 사용할 경우 메모리는 동적으로 구성된다. 즉 서버의 물리적인 메모리를 모두 SQL 서버에 할당해 운영하다가, 운영체제에서 메모리를 요구할 경우 메모리를 반환하는 방식이다(따라서 DB 전용으로 구축해 사용하는 서버는 동적으로 메모리를 구성해 사용하는 것이 좋다). 하지만 실제 SQL 서버에서 활용하는 메모리는 어느 정도이고 구축된 하드웨어의 자원을 얼마나 사용하고 있을까. 시스템 관리자의 첫 번째 임무는 이것을 확인하는 것이다.


운영체제별 최대 지원 메모리는 <표 1>과 같다(앞서 언급한 A사의 경우 더 이상 메모리를 증설할 수 없는 이유도 Standard Edition의 경우 최대 2GB 메모리까지 지원하기 때문이다). 운영체제가 윈도우 2003이고 Enterprise Edition이라면 사용가능한 메모리는 더 늘어나겠지만 이 경우에도 SQL이 Standard Edition이면 2GB 이상 사용할 수 없다.


SQL 모니터링은 이렇게


만약 SQL 서버가 다른 애플리케이션과 함께 구동된다면 SQL이 메모리를 독점하는 것을 막기 위해 고정 메모리를 구성하는 것이 좋다. SQL 서버가 사용할 수 있는 메모리의 한계를 시스템적으로 정하는 것이다. 이처럼 SQL 서버가 고정 메모리를 할당하도록 하려면 <화면 1>과 같이 동적 메모리의 최소, 최대치를 같게 한 후 ‘고정된 메모리 크기 사용’ 옵션을 선택하면 된다. 저장 프로시저를 이용해 고정 메모리를 구성할 수도 있는데 다음과 같이 설정하면 된다(이 때 RECONFIGURE WITH OVERRIDE를 반드시 실행해야 한다).


sp_configure “show advanced options”, 1
go
sp_configure “max server memory”, 512
go
RECONFIGURE WITH OVERRIDE
go

이처럼 메모리를 어떻게 할당해 활용할 것인가에 대한 판단이 끝났다면 현재 시스템의 사용량을 측정해 향후 시스템 확장 계획의 기본 자료로 삼아야 한다. 먼저 시스템의 성능을 모니터링하려면 <화면 2>와 같이 『시작 → 프로그램 → 관리도구 → 성능』을 이용한다. 시간의 추이에 따라 성능의 변화를 통해 이상 징후를 발견하면 적절한 조치를 내리면 된다. 여기에 새로 모니터링하고자 하는 성능 카운터를 추가하려면 <화면 3>과 같이 선택하면 된다.


메모리 모니터링시 관심을 가져야 할 성능 개체는 <표 2>에 정리했다. 각 성능 개체별로 그 의미와 임계치 등을 확인해 그 값에 따라 적절한 조치를 해주면 된다. 이밖에도 CPU를 모니터링할 때는 Processor와 System 성능 개체에 관심을 가질 필요가 있다. 이 가운데 Processor 개체는 CPU 사용률을 나타내는 것으로 24시간을 주기로 80% 이상 10분 동안 유지된다면 CPU에 병목현상이 발생하는 것이므로 이에 대한 보완책을 세워두는 것이 필요하다. System 개체는 프로세서를 얻기 위해 프로세서 큐에서 대기한 쓰레드 수를 의미한다. CPU 1개당 값이 2보다 크면 병목현상이 나타나는 것이므로 주의깊게 살펴봐야 한다.


디스크 모니터링은 크게 두 가지로 나눠 살펴볼 수 있다. 먼저 일반 디스크의 경우 디스크 사용률을 나타내는 PhysicalDisk 개체의 %Disk Time는 90보다 낮고, Avg.Disk Queue Length 개체는 2보다 낮은 것이 정상이다. 단, 어레이(Array) 디스크인 경우에는 다음을 참고한다.


[RAID 0]
Physical Disk: Disk Reads/sec + Disk Write/sec / Disk count < 100
[RAID 1]
Physical Disk: Disk Reads/sec + (2 * Disk Write/sec) / 2 < 100
[RAID 10]
Physical Disk: Disk Reads/sec + (2 * Disk Write/sec) / Disk count < 100
[RAID 5]
Physical Disk: Disk Reads/sec + (4 * Disk Write/sec) / Disk count < 100

이처럼 다양한 성능모니터를 통해 시스템 자원을 관찰하는데 해당 수치는 최소 하루 이상 모니터링한 결과에 10분간 지속되는 값을 대입해야 정확한 값을 얻을 수 있다. 또한 이것은 SQL의 모니터링이므로 다른 응용 프로그램의 작업이 일어날 경우는 이를 배제해야 한다. 지금까지 살펴본 성능 모니터 값을 카운터 로그로 남겨 놓으면 이를 이용해 <화면 4>와 같이 시스템 상태 그래프를 추출할 수 있다.


<화면 1> 고정된 메모리 크기 사용


<화면 2> 윈도우 성능 모니터


<화면 3> 새로운 카운터 추가


<표 1> SQL 버전별 지원되는 메모리 한계
운영체제 Enterprise Standard Personal Developer
윈도우 2000 데이터센터 64GB 2GB 2GB 64GB
윈도우 2000 어드밴스드 서버 8GB 2GB 2GB 8GB
윈도우 2000 서버 4GB 2GB 2GB 4GB
윈도우 2000 프로페셔널 N/A N/A 2GB 2GB

 

<화면 4> 실제 카운터 로그로 추출한 시스템 상태 그래프


<화면 5> 프로필러를 이용한 모니터링


<화면 6> SQL 서버 Best Practices Analyzer


<화면 7> SQL Best Practices Analyzer Reports


<표 2> 메모리 모니터링

성능 개체 카운터 설명 임계치
Memory Availavle MBytes 실제 사용할 수 있는 메모리 양. 즉 남아있는 메모리 양 이 카운터는 항상 5MB보다 커야 한다.
Memory Pages/sec 메모리에서 디스크로 Page Out 되거나 디스크에서 메모리로 Page in 된 초당 페이지수 값이 0이어야 함. SQL 전용 서버의 경우 평균 0~20, 20을 초과할 경우 물리적인 메모리가 부족한 것임
Process Page Faults/Sec SQL Server Instance 초당 페이지 없음. 오류수 이 값 또한 0이어야 함. 20을 초과할 경우 메모리가 부족함
Process Working Set SQL Server Instance SQL 서버가 사용하는 인스턴트별 메모리 양 5MB 보다 높아야 한다. 이보다 낮다면 메모리 부족
SQL Server: Buffer Manager Buffer Cache hit Ratio 캐시 적중율 90%보다 높아야 한다.
SQL Server: Buffer Manager Free Pages 할당하지 않은 SQL 서버 메모리 버퍼 수 5MB 이하면 물리적 메모리가 부족하다.
SQL Server: Memory Manager Target Server Memory SQL 서버가 사용할 수 있는 전체 메모리 양 이 값을 모니터링해 메모리 설정을 결정
SQL Server: Buffer Manager Total Server Memory SQL 서버가 사용하고 있는 전체 메모리 양 이 값을 모니터링해 메모리 설정을 결정

실행 중인 SQL문을 모니터링하자


지금까지 전반적인 시스템 모니터링 방법을 살펴봤다. 지금부터는 실제로 운영되는 SQL문을 모니터링하는 방법을 살펴보자. SQL 서버를 설치하면 ‘SQL 프로필러(Profiler)’라는 툴이 같이 설치되는데 이를 이용해 <화면 5>와 같이 쿼리문의 Duration 항목을 보면 실행시간을 확인할 수 있다. 여기서 실행시간이 비정상적으로 긴 쿼리가 발견되면 문제가 발생한 것일 가능성이 크다. 이 밖에도 프로필러를 이용하면 SQL 서버의 보안감사 등 다양한 작업을 할 수 있다.


요근래 마이크로소프트는 기타 유용한 툴들과 함께 각 서버별로 BPA(Best Practices Analyzer) 툴을 제공한다. BPA 툴이란 일반적으로 알려진 최적의 사례를 현재 사용하고 있는 데이터베이스에 적용시켜주는 데이터베이스 관리 툴로, 주로 SQL의 사용률과 관리 측면에 초점을 맞췄다. 이 툴은 MS 웹사이트(www.microsoft.com/ downloads)에서 ‘SQL Best Practices Analyzer’로 검색하면 다운로드할 수 있다.


SQL BPA를 설치하면 SQL 서버에 sqlbpa라는 데이터베이스를 생성해 검색한 결과를 저장하며 <화면 7>과 같은 리포트를 출력하므로 이를 토대로 SQL의 상태와 관리에 관련해서 참고할 수 있다. 이 때 한 가지 주의할 사항은 SQL BPA를 실행하면 검사대상 데이터베이스를 직접 액세스한다는 점이다. 이 과정에서 일정 정도의 SQL의 부하가 발생하므로 사용량이 적은 시간에 실행하는 것이 바람직하다.


제공 : DB포탈사이트 DBguide.net

출처명: 마이크로소프트웨어 [2005년 10월]'

Posted by 아로스
In a html page in a frame I have the following code:

<!------- Begin Stat code ------------->
<script language="JavaScript">
var path = 'http://www.mysite.com/contvb.aspx';
document.write('<img height=1 width=1 border=0 src="');
document.write(path);
document.write('?referer=');
document.write(escape(parent.document.referrer));
document.write('&rsl=');
document.write(screen.width+"x"+screen.height);
document.write('&dp=');
document.write(screen.colorDepth);
document.write('">');
</script>
<noscript>
<img height=0 width=0 src="http://www.mysite.com/contvb.aspx";>
</noscript>
<!------- End Stat code ------------->

the contvb.aspx save a record for each visit to the html page.
And usually everything is ok (there is a field for "referer", "rsl", "dp"),
but rarelly when I look at the record I find something strange:

"<noscript><img height=0 width=0 src="

How does it happens? Can I solve the problem?


--

Giuseppe

출저:http://newsgroups.derkeiler.com/Archive/Comp/comp.lang.javascript/2005-07/msg00149.html
Posted by 아로스
ServerVariables collection 사용으로 서버 및 클라이언트 정보확인이 가능하며
여기서 얻어낸 정보로 도메인 및 설정된 언어에 따라 웹페이지 이동과
파일 업로드, 로그 분석, 약간의 보안설정 등 많은 부분에 이용이 가능합니다.

APPL_PHYSICAL_PATH : E:\HOME\help_tt_co_kr\
메타베이스 경로에 해당하는 실제(디렉터리) 경로를 반환합니다.

- PATH_TRANSLATED : E:\HOME\help_tt_co_kr\servervariables\ServerVariables.asp
실제(디렉토리) 경로를 반환합니다.

- HTTP_HOST : help_tt.co.kr
도메인명을 반환합니다.

- HTTP_URL : /servervariables/ServerVariables.asp
도메인명의 이후 URL을 반환합니다.

- HTTP_METHOD : GET
전송방식을 반환합니다.

- HTTP_REFERER : http://help.tt.co.kr/servervariables/servervariables_start.asp
현재 페이지를 참조했던 이전 페이지 URL 문자열을 반환합니다.

- LOCAL_ADDR : 222.110.110.3
요청에 응답하는 서버 주소를 반환합니다.

- SERVER_PORT : 80
요청에 응답하는 서버 포트번호를 반환합니다.

- SERVER_SOFTWARE : Microsoft-IIS/6.0
요청에 응답하는 서버의 소프트웨어 이름과 버전 확인이 가능합니다.

- REMOTE_ADDR : 222.235.68.2
요청을 하는 원격 호스트 주소를 반환합니다.

- REMOTE_PORT : 2965
요청을 하는 원격 호스트의 포트번호를 반환합니다.

- HTTP_ACCEPT_LANGUAGE : ko
컨텐트를 표시하는 데 사용할 설정 값의 확인이 가능합니다.


위의 정보 확인은 아래의 소스로 확인이 가능합니다.
<%
response.write "<b>APPL_PHYSICAL_PATH :</b> " & Request.ServerVariables("APPL_PHYSICAL_PATH") & "<br>"
response.write "<b>PATH_TRANSLATED :</b> " & Request.ServerVariables("PATH_TRANSLATED") & "<br>"
response.write "<b>HTTP_HOST :</b> " & Request.ServerVariables("HTTP_HOST") & "<br>"
response.write "<b>HTTP_URL :</b> " & Request.ServerVariables("HTTP_URL") & "<br>"
response.write "<b>HTTP_METHOD :</b> " & Request.ServerVariables("HTTP_METHOD") & "<br>"
response.write "<b>HTTP_REFERER :</b> " & Request.ServerVariables("HTTP_REFERER") & "<br>"
response.write "<b>LOCAL_ADDR :</b> " & Request.ServerVariables("LOCAL_ADDR") & "<br>"
response.write "<b>SERVER_PORT :</b> " & Request.ServerVariables("SERVER_PORT") & "<br>"
response.write "<b>SERVER_SOFTWARE :</b> " & Request.ServerVariables("SERVER_SOFTWARE") & "<br>"
response.write "<b>REMOTE_ADDR :</b> " & Request.ServerVariables("REMOTE_ADDR") & "<br>"
response.write "<b>REMOTE_PORT :</b> " & Request.ServerVariables("REMOTE_PORT") & "<br>"
response.write "<b>HTTP_ACCEPT_LANGUAGE :</b> " & Request.ServerVariables("HTTP_ACCEPT_LANGUAGE") & "<br>"
%>


위의 정보 및 다른 값들을 확인하기 위해서는 아래의 소스로 확인이 가능합니다.
<table border="1">
        <tr>
                <td>변수명</td>
                <td>값</td>
        </tr>
        <%
        for each key in request.servervariables
        %>
        <tr align=left>
                <td><%=key%></td>
                <td>
                <%
                if request.servervariables(key)="" then
                        response.write " "
                else
                        response.write request.servervariables(key)
                end if
                %>
                </td>
        </tr>
        <%
        next
        %>
</table>

출처 : [기타] (주)오늘과내일 웹호스팅 페이지 http://tt.co.kr

Posted by 아로스

* Windows 2003 Server을 사용하는데 있어 최적화 방법을 정리해 보았습니다.
안정성 > 사용상 편의 / 속도 > 시각적 효과 순으로 비중을 두었습니다.
제 개인적인 주관성에 집중되어 있으므로 차이에 따라 본인의 희망과 다른방향으로 나갈수도 있습니다.
아래 나열된 팁을 사용하여 문제가 발생되더라도 그 책임은 사용자에게 있습니다.
조금이나마 도움이 되시길 바랍니다.

------------------------------------------------------------

* 윈도우 2003은 서버용 운영체제 이므로 기본적인 음성,그래픽 혹은 자바등의 구성이 제외되어 있거나 비활성화 되어 있습니다.
- 음성/테마 적용 및 자바설치등을 해주면 XP와 비슷한 환경을 만드실 수 있습니다.

* 기본적으로 Windows 2003은 저사양에서도 윈2000 or XP보다 훨씬 빠른속도와 확장성을 보여주고 있습니다.

----------------------------------------------------------------------------

운영체제 설치 개략

* 처음 운영체제를 설치할때에는 반드시 인터넷이 연결되지 않은 상태에서 하시길 바라며 웜패치 및 보안패치를 반드시 해주시기 바랍니다.
* 칩셋패치를 반드시 해주시기 바랍니다. 시스템의 성능을 올려줍니다.
* 설치후 제일먼저 백신프로그램을 설치하셔야 하며 XP와는 다르게 서버용 백신을 설치 하셔야 합니다.
* 드라이버는 최신사양으로 설치하는것을 원칙으로 하나. 드라이버와 운영체제간의 호환성 문제로 인해 윈도우즈 업데이트를 통한 드라이버 설치를 권장합니다.
* direc X 설치후 여러가지 소프트웨어를 설치 합니다.
* 비활성화 목록을 활성화 시킵니다.

----------------------------------------------------------------------------

№1. Windows 2003 설치버젼확인

시작 > 실행 > winver을 입력합니다.
(예) Microsoft(R) Windows 버전 5.2(빌드 3790.srv03_rtm.030324-2048)

№2. 멀티부팅시 유의 및 부팅순서/운영체제 목록 표시시간 설정 변경

[1] 멀티부팅 유의사항
반드시 C Drive 에는 윈2003보다 하위버젼 설치후 D drive등에 윈2003설치합니다.
상하위 버전을 바꾸어 설치시 상위버전이 실행하지 않습니다.

[2] 부팅순서 및 운영체제 목록 표시시간 설정 변경하기
내컴퓨터 > 속성 > 고급 > 시작 및 복구 > 설정 > 시스템 시작 에서 설정합니다.


№3. 시스템 설정

[1] DirectX 활성화하기
시작 > 실행 > dxdiag > 확인 > 디스플레이 항목에서 가속을 최대로하고 3가지 3D 항목이 사용안함으로 되어 있는것을 사용으로 변경합니다.
Directdraw - 사용으로 변경, Direct3d - 사용으로 변경, agp 질감가속 - 사용으로 변경
시작 > 실행 > dxdiag > 확인 > 소리 항목에서 DirectX 기능에 하드웨어 소리가속을 최대로 변경합니다.

[2] 디스플레이 설정
최신 디스플레이 드라이버를 설치합니다. (다이렉트X가 설치되어 있어야 합니다.)
시작 > 제어판 > 디스플레이 > 디스플레이등록정보 > 설정 > 고급 > 문제해결 > 디스플레이 하드웨어 가속을 최대로 변경합니다.

[3] 사운드 설정
최신 사운드 드라이버를 설치합니다. (다이렉트X가 설치되어 있어야 합니다.)
시작 > 제어판 > 사운드및오디오장치 > 볼륨 > 스피커설정 > 고급 > 사운드하드웨어를 최대로 변경합니다.

[4] 자바가 실행안될때 (예:다음카페에서 cafe on이 되지않는 경우)
자바의 저작권문제로 빠져 있던 마이크로 소프트 버추얼머신을 설치합니다.
공개자료실에서 쉽게 구할 수 있습니다. 설치프로그램과 업데이트프로그램을 혼동하기 쉬우므로 주의하시기 바랍니다.

[5] 시스템의 설정변경
내컴퓨터 > 속성 > 고급 > 시작 및 복구 > 설정 > 디버깅정보쓰기를 작은메모리덤프(64KB)로 변경합니다.
내컴퓨터 > 속성 > 고급 > 성능 > 설정 > 성능옵션 > 고급 > 프로세서 사용계획 메모리 사용계획을 두곳다 프로그램으로 변경합니다.

[6] 서비스 항목설정
시작 > 실행 > services.msc > 확인 > 서비스 > 서비스로컬 에서 아래의 항목으로 변경합니다.
(o):자동 (*):수동 (x):사용안함
Alerter(x) : 선택된 사용자와 컴퓨터에 관리 경고를 알립니다.
Automatic Updates(x) : 중요한 windows업데이트를 자동으로 다운로드하고 설치할 수 있도록 합니다.
Error Reporting Service(x) : 예상치 못한 응용프로그램 오류를 모으고 저장하거나 microsoft에 보고합니다.
Help and Support(*) : 도움말 및 지원센터를 실행 할 수 있도록 합니다.
IMAPI CD-Burning COM Service(*) : IMAPI를 이용하여 CD굽기를 관리합니다.
Messenger(x) : 클라이언트와 서버 사이에 net send및 경고 서비스 메시지를 전송합니다.
Portable Media Serial Number(x) : 이 컴퓨터에 연결된 어떠한 Portable Media Player의 일련번호를 검색합니다.
Protected Storage(x) : 개인키와 같은 중요한 정보를 보호하고 허가되지 않은 서비스, 프로세스, 사용자 액세스를 방지합니다.
Remote Registry(x) : 원격사용자가 이 컴퓨터에서 레지스트리 설정을 수정할 수 있도록 설정합니다.
Secondary Logon(x) : 다른 자격 증명에서 프로세스를 시작할 수 있도록 합니다.
Themes(x) : 사용자 경험 테마 관리를 제공합니다.
Windows Image Acquisition(WIA) : 스캐너 및 카메라에 대한 이미지 인식 서비스를 제공합니다.
Windows Time(x) : 네트워크 상에서 모든 클라이언트 및 서버의 날짜 및 시간 동기화를 유지합니다.

[7] Theme 서비스 및 Audio 서비스 활성화하기
시작 > 실행 > services.msc > 확인 > 서비스 > 서비스로컬에서 theme 더블클릭 > 자동으로설정후 적용합니다.
시작 > 실행 > services.msc > 확인 > 서비스 > 서비스로컬에서 windows audio 더블클릭-(자동)으로 적용

[8] 활성화시킨 Theme 및 Audio 사용하기
제어판 > 디스플레이 > 설정 > 고급 > 문제해결 > 하드웨어가속을 (최대)
제어판 > 사운드및오디오장치 > 볼륨 > 스피커설정 > 고급 > 성능 > 오디오재생을 최대로 샘플전환속도는 최상으로변경합니다.
그리고 오디오 각종 성능을 최적화. 볼륨 각종시작음 종료음 등등을 설정합니다.



№4. 최적화 팁 (윈도우 부분)
[6] 1차 가상메모리 설정
제어판 > 시스템 > 고급 > 성능 > 설정 > 성능옵션 > 고급 > 가상메모리 > 변경 > 1기가를 기준으로 1536MB / 1536MB의 스와핑드라이브를 지정합니다.

[7] 오류보고 끄기
제어판 > 시스템 > 고급 > 오류보고 > 오류 보고 사용안함 선택합니다.

[8] 자동 시스템 재부팅 끄기
제어판 > 시스템 > 고급 > 시작 및 복구 > 설정 > 시스템오류 항목의 자동으로 다시시작을 체크해제합니다.

[9] 시각효과 세부 설정
제어판 > 시스템 > 고급 > 성능 > 설정 > 성능옵션 > 시각효과 > 최적 성능으로 조정을 선택합니다.
제어판 > 디스플레이 설정 > 화면배색 > 효과 → 모두 off

[1] 시스템 시작시 ctrl+alt+del 안누르기
시작 > 실행 > gpedit.msc입력 > 그룹정책개체편집기 > 컴퓨터구성 > windows설정 > 보안설정 > 로컬정책 > 보안옵션 > 대화형로그온 : [ctrl+alt+del]을 사용할필요없음 > 더블클릭 > 사용으로 체크 합니다.

[2] 시스템 종료시 이벤트 추적기 표시 안하기
시작 > 실행 > gpedit.msc입력 > 그룹정책개체편집기 > 컴퓨터구성 > 관리 템플릿 > 시스템 > 우측창에서 시스템 종료이벤트 추적표시 더블클릭 > 사용 안함으로 변경합니다.

[3] 로그온시 암호 안물어보기
시작 > 실행 > control userpasswords2 > 확인 > 사용자계정 > 사용자이름과 암호를 입력해야 이 컴퓨터를 사용할수 있슴에 체크를 해제함 > 확인 > 창이 하나 나오면 여기에 설치시 설정한 암호를 적고 확인 합니다.

[4] Internet Explorer 세팅 및 인터넷 최적화
* 도구 > 인터넷 옵션 > 일반 > 임시인터넷파일 > 설정 > 임시인터넷파일폴더에서 사용할 디스크 공간을 자신의 하드디스크 용량에 맞추어 폴더변경 및 적당한 공간설정을 합니다.
* 도구 > 인터넷 옵션 > 일반 > 열어본 페이지 목록에서 페이지 보관일수를 적당히 설정합니다.
* 도구 > 인터넷옵션 > 보안 > 보안을 보통으로 변경합니다.
제어판 > 프로그램 추가/제거 > windows 구성요소 추가/제거 > windows구성요소 마법사 > Internet Exporer 보안강화구성을 클릭후 체크 해제하고 밑에 자세히를 클릭 > 관리자 그룹용과 기타사용자 그룹용 체크해제한 후 확인 > 다음 클릭 > windows구성요소 마법사 완료가 되면 확인 > 인터넷옵션 보안에는 보통으로 변경됩니다.
* 도구 > 인터넷 옵션 > 개인정보 - 낮음
* 도구 > 인터넷 옵션 > 연결 > LAN설정 > 자동구성의 모든 체크 해제, 프록시서버에 모든 체크를 해제합니다.
* 도구 > 인터넷 옵션 > 프로그램 > 시작할때 기본 브라우저 확인에 체크 해제 합니다.
* 도구 > 인터넷 옵션 > 고급 에서
> 멀티미디어 > 이미지 크기 자동조정가능에 체크 해제합니다.
> 보안 > 브라우저 닫을때 임시 인터넷 파일 폴더 비우기에 체크 합니다. (시스템 리붓 거의 안할경우만 추천합니다.)
> 탐색 > 예약시 동기화할 오프라인 항목 사용에 체크해제 합니다.
> 탐색 > 웹페이지 단추 및 컨트롤 시각 스타일 사용에 체크해제 합니다.
> 탐색 > 인라인 자동완성사용에 체크해제 합니다.
> 탐색 > URL을 항상 UTF-8로 보냄에 체크 해제 합니다.
> 탐색 > 주소표시줄에 이동단추표시에 체크 해제 합니다.
> 탐색 > 타사브라우저 확장 사용에 체크 해제 합니다.

[5] 작업표시줄의 인터넷 익스플로러창 합쳐지는것 막기
시작 > 제어판 > 작업표시줄 및 시작메뉴 > 같은 종류의 작업 표시줄 단추를 그룹으로에 체크표시 해제합니다.

[6] 미리보기 케쉬로 인한 메모리 사용량 과대 방지하기
윈도우탐색기 > 폴더옵션 > 미리보기 케쉬안함에 체크 합니다.

[7] 내문서 폴더 저장위치 변경하기
내문서 > 속성 > 대상폴더위치에서 변경합니다.

[8] 탐색기의 폴더옵션 설정
탐색기 > 도구 > 폴더옵션 > 보기 > 고급옵션 >
보호된 운영체제 파일 숨기기에 체크 해제,
숨김 파일 및 폴더 표시에 체크,
시스템 폴더 내용 표시에 체크,
알려진 파일 형식의 확장명 숨기기에 체크 해제,
암호화 되거나 압축된 NTFS 파일을 컬러로 표시에 체크 해제,
폴더 및 바탕화면 항목에 팝업설명표시에 체크 해제,
폴더팁에 파일 크기 정보 표시에 체크 해제 한 후 적용을 누릅니다.
후에 모든 폴더에 적용선택합니다.

[9] 휴지통 설정
휴지통 > 속성 > 일반설정 > 휴지통의 최대 크기를 5%로 삭제 확인 대화상자 표시에 체크를 해제 합니다.

[10] XP 처럼 디스플레이 사용하기
내컴퓨터 > 속성 > 고급 > 성능 > 설정 > 시각효과 > 두번째 최적모양으로설정 > 선택 > 확인합니다.

[11] 윈2003 작업중단방지
* 제어판 > 디스플레이 > 디스플레이 등록정보 > 화면보호기 > 다시 시작할 때 암호로 보호에 체크를 해제 합니다.
* 제어판 > 디스플레이 > 디스플레이 등록정보 > 화면보호기 > 전원 > 고급 > 컴퓨터가 대기 모드에서 나올 때 암호로 묻기에 체크 해제 합니다.

[12] 내문서나 미디어플레이어 사용후에 흔적 지우기.
시작 > 실행 > gpedit.msc > 그룹정책개체편집기 > 사용자구성 > 관리템플릿 > 작업표시줄및시작메뉴
* 종료시 최근에 사용한문서 기록지우기를 더블클릭 > 사용선택후 확인
* 최근에 사용한 문서 기록을 보관안함을 더블클릭 > 사용선택후 확인

[13] 종료 속도 빠르게 하기
시작 > 실행 > gpedit.msc > 그룹정책개체편집기 > 컴퓨터구성 > 관리템플릿 > 시스템 > 사용자프로필 > 프로필 언로드 및
업데이트의 재시도 최대횟수를 더블클릭 > 사용을 선택후 재시도횟수를 0 으로 수정합니다.


№5. 최적화 팁 (레지스트리 부분)

[1] 메뉴 팝업속도 향상하기
HKEY_CURRENT_USER\ControlPanel\desktop - MenuShowDelay → 0

[2] MSIE 로딩속도(DNS 캐쉬수정) 향상하기
* HKEY_LOCAL_MACHINE\System\CurrentControlset\Services\Dnscache\Parameters
새로만들기(DWORD - 10진수)
CachehHashTableBucketSize---->1
CachehHashTableSize---------->384
MaxCacheEntryTtlLimit-------->64000
MaxSOACacheEntryTtlLimit----->301
* HKEY_USER\.Default\Software\Microsoft\Windows\CurrentVersion\InterSettings
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\InterSettings
새로만들기(DWORD - 16진수)
MaxConnectionsPerSever------>20
MaxConnectionsPer1_0Sever--->20
* HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RemoteComputer\
NameSpace에서 {D6277990-4C6A-11CF-8D87-00AA0060F5BF} 폴더 자체를 삭제

[3] 폴더창 팝업속도 향상하기
HKEY_CURRENT_USER\Control Panel\desktop\windowmetrics
새로만들기(문자열 값)
MinAnimate ----> 0

[4] 아이콘의 화면출력(Refrash rate) 속도향상하기
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Update
UpdateMode ----> 0

[5] L2캐쉬 지정으로 속도향상하기
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\MemoryManagement
SecondLevelDataCache ----> L2 캐쉬값 입력 (예:512)

[6] 디스크 캐쉬 세부 설정 - 하드속도 향상하기
별도의 하드 캐쉬 램이 있는 사용자(레이드 카드에 램이 장착된 경우)는 필요없습니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
IoPageLockLimit ----> 40000(512MB기준)

[7] 로그온 메시지
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Winlogon
새로만들기(문자열 값)
LegalNoticeText ----> 더블클릭후 편집상자에 메시지 입력

[8] 공유문서 삭제/감추기
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\DelegateFolders
59031a47-3f72-44a7-89c5-5595fe6b30ee ----> 삭제

[9] 도움말메뉴 삭제하기
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer
새로만들기(DWORD - 10진수)
NoSMHelp ----> 1 (0으로 하면 복원됨)

[10] 최근문서메뉴 삭제하기
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
새로만들기(DWORD - 10진수)
NoRecentDocsMenu ----> 1

[11] 입력도구모음/고급텍스트 삭제
* 시작 메뉴바에서 입력도구모음 언체크
* cmd>%SystemRoot%\System32\Regsvr32.exe /u %SystemRoot%\System32\msimtf.dll
%SystemRoot%\System32\Regsvr32.exe /u %SystemRoot%\System32\msctf.dll
* RegSvr32 확인
* Ctrl-Alt-Del(작업관리자) - 프로세스 - ctfmon.exe - 끝내기 - 확인
* HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run - ctfmon.exe 삭제

[12] 윈도즈 메신져 삭제메뉴 추가
windows/inf/sysoc.inf
msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,hide,7 `hide` 제거
msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,7

[13] 종료 빠르게 하기
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WaitTokillServiceTimeout : 20000 → 2000 로 수정

[14] 무응답 응용프로그램 타임아웃 시간줄이기
HKEY_CURRENT_USER\Control Panel\Desktop에서 HungAppTimeout 값 5000(5초) → 1000 (1000 = 1초) 로 수정

Posted by 아로스

DB injection 공격?
구글에서 <script src= 0.js 라고 검색하면 놀랄 정도로 많은 사이트들이 DB 공격을 받았음을 확인 하실 수 있을겁니다.
제가 관리하는 사이트 또한 위와같은 스크립트 삽입되어 수많은 사이트를 찾아 다니며 복구하고 나름대로 보안하는 방법을 접하게 된 것을 올려 봅니다.


1. 공격 유형 :
SQL injection 홈페이지 상의 DB사용하는 페이지를 공격 즉, 웹소스 취약한 곳을 통해 DB를 공격.
특수 코드 삽입해서 DB에 스크립트를 삽입하여 접속하는 사용자에게 악성코드를 설치하는 유형.


2. 조치 시 주의 사항
참조 : http://swbae.egloos.com/1747128
1) 홈페이지 변조를 통해 악성코드 링크를 삽입한게 아니라, SQL injection 기법을 이용해 DB 컨텐츠에 삽입한 것입니다.
2) 조치 시 DBA 의 도움을 받는게 좋습니다.
3) 공격 때문에 기존의 데이터가 일부 덧씌워져 변경되었을 수 있습니다. 이럴 땐 백업의 도움을 받아야 겠지만, 일부 데이터의 유실은 어쩔 수 없을 듯...
4) 근본 원인은 사이트가 SQL injection 공격에 취약하게 개발되어 있어서 그렇습니다. 공격 포인트를 파악해서 외주개발 업체, 혹은 내부개발팀을 통해 소스를 수정하세요.
5) 소스를 수정할 수 없는 경우 웹 방화벽이 도움이 될 수도 있습니다. 그러나, 제품 도입시 면밀히 검토하실 필요가 있습니다. 단순 패턴 매칭 형태를 사용해서, 보유패턴과 1byte 만 틀려도 탐지 못하는 제품이 몇 개 있더군요.


3. 공격으로 생긴 DB table 삭제
comd_list 테이블 삭제
ahcmd 테이블 삭제
foofoofoo 테이블 삭제
Reg_Arrt 테이블 삭제
comd_list 테이블 삭제
D99_CMD 테이블 삭제
D99_TMP 테이블 삭제
Kill_kk 테이블 삭제
jiaozhu 테이블 삭제


4. 삽입 스크립트 제거 복구


DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR
b.xtype= 35 OR
b.xtype = 231 OR
b.xtype = 167);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
  EXEC(
    'update ['+@T+'] set ['+@C+'] = left(
            convert(varchar(8000), ['+@C+']),
            len(convert(varchar(8000), ['+@C+'])) - 6 -
            patindex(''%tpircs<%'',
                      reverse(convert(varchar(8000), ['+@C+'])))
            )
      where ['+@C+'] like ''%<script src=http://s.ardoshanghai.com/s.js></script>'''
      );
  FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;
'스크립트 부분은 삽입된 스크립트를 입력

5. 보안 적용 1 - MSSQL 메모리에서 위험한 sp들을 내린다.
보안상 위협이 될 수 있는 개체들에 대하여 일반 사용자 그룹의 사용권한을 제한한다.
참조: http://blahblah.springnote.com/pages/351077
SP 등록해제는 위험을 감안해야 하므로 메모리에서만 내린다. 단점, 재부팅되거나 DB 재시작시 다시 아래 쿼리 실행 할것!

dbcc xp_cmdshell(free)
dbcc xp_dirtree(free)
dbcc xp_regdeletekey(free)
dbcc xp_regenumvalues(free)
dbcc xp_regread(free)
dbcc xp_regwrite(free)
dbcc sp_makewebtask(free)


6. 보안 적용 2
무엇보다 DB 인젝션이 발생한 원인인 로그인, 회원가입, 게시판 등 사용자가 DB를 접하게 되는 소스 개발시 특수 문자 보안 적용 안된 경우가 가장 유력하다.
로그인, 회원가입, 아이디 비번찾기, 게시판 등이 개발자가 개발하면서 DB를 공격할만한 특수 문자에 대한 차단 기능을 적용하지 않은 문제로 판단됨. 소스를 모두 개선 해야함.
보안참조 : http://magic.littleworld.net/ai/kmod.asp?no=327&amp;isn=&amp;mymsg


위 글은 세이박스에서 작성한 글입니다.
출처를 적어 주시고 많은 국내 사이트들이 공격을 받고 있으니 도움이 되기 위해 많이 많이 올려주세요! ^^
출처 : 세이박스  http://saybox.tistory.com/453

Posted by 아로스

아로스