Thứ Tư, 29 tháng 8, 2007

Chu Trình Sống Của Một Phần Mềm - Các Bước Kiểm Tra Chất Lượng

  • - Ở giai đoạn khởi điểm - phân tích yêu cầu (có thể do designer/developer hoặc khách hàng đưa ra), requirement của 1 software bao gồm: draft document, use cases... Giai đoạn này tester sẽ phối hợp với designer/developer review qua để phát hiện các sai sót hoặc vấn đề ko phù hợp để hiệu chỉnh. Những lỗi được phát hiện trong quá trình này - gọi là Inception - thường được gọi là Review Defect.

    - Giai đoạn kế tiếp - thường gọi là Elaboration - là giai đoạn hình thành requirement hoàn chỉnh, bao gồm tập hợp các Use Case, Design model, database model, non-technical document (mô tả các business rule khác), các document hỗ trợ việc theo dõi, đánh giá tiến độ của project cũng bắt đầu được hình thành. Giai đoạn này tester cũng phải đưa ra được Test Plan (kế họach test) ghi rõ những tiêu chí test, flatform, criteria.... Tất cả các document này cũng được những thành viên có liên quan review để tìm issue (Review Defect) và hoàn chỉnh với sự thỏa thuận với khách hàng. Sau đó developer thường sẽ phát triển 1 bản thử nghiệm (gọi là prototype hay demo) dựa trên 1 số use case, tester sẽ dựa trên đó test bản thử nghiệm và tìm ra các Testing Defect/Bug, các lỗi này sẽ được tập hợp thường kì, đánh giá độ nguy hiểm, khả năng sửa, ... để hỗ trợ đánh giá tính hiệu quả của product theo từng giai đoạn . Đồng thời thiết lập 1 hệ thống để lưu trữ các lỗi tìm được, mô tả rõ ràng để developer vào đó theo dõi và sửa.

    - Sau đó, là giai đoạn phát triển thật sự sau khi hầu hết các document gần như hoàn chỉnh (ngoại trừ use cases cần hiệu chỉnh trong suốt chu trình sống của project). Giai đoạn này thường đươc gọi là Construction - nó sẽ được chia nhỏ làm nhiều giai đoạn con (phase hoặc iteration) để tiện cho việc quản lý và theo dõi, mỗi giai đoạn con sẽ cần hoàn thành 1 lượng use cases nhất định và cuối mỗi phase là 1 bản build của sản phẩm (các bạn chú ý trong hầu hết các ứng dụng chuyên nghiệp chưa hoàn chỉnh thường trong version có ghi vd như: Version 5.6 build xxxxxxxx ...định dạng các số xxx và ý nghĩa thế nào tùy thuộc người sản xuất). Tester sẽ dựa trên Test Plan, Use cases trong phase và 1 số qui định/chuẩn để thực hiện test trên build, gọi là System Test hay Build Test, tức là kiểm tra xem các feature của sản phẩm có chạy đúng như những gì use case đưa ra, có đúng như business rule hay ko...
    Developer trong giai đoạn này cũng có vai trò của 1 tester, đó là review lại code của mình có phát triển đúng coding convention ko, có dư biến, dư bộ nhớ ko ..., đồng thời khi hoàn thành 1 feature cũng tham gia test sơ xem có chạy được ko trứơc khi tạo build. Tương tự trên, các lỗi được tìm thấy sẽ được tập hợp thường kì, đánh giá độ nguy hiểm, khả năng sửa ... để hỗ trợ đánh giá tính hiệu quả của product theo từng giai đoạn.

    - Giai đoạn cuối cùng của chu trình sống của 1 phần mềm thường là Transition, hay là kiểm tra và giao sản phẩm cho khách hàng. Giai đoạn này công việc của developer giảm xuống vì hầu hết các tính năng đã hoàn thành ở các giai đoạn trước, nhưng công việc của tester sẽ nặng hơn vì phải tập trung kiểm tra chất lượng mọi mặt của sản phẩm trước khi đến tay khách hàng. Developer liên tục theo dõi trên hệ thống lưu trữ lỗi để tìm giải pháp sửa và thông báo cho tester kiểm tra lại.

    Cuối cùng khi phía phát triển và tester hoàn thành sản phẩm ko còn 1 lỗi nghiêm trọng nào, sản phẩm sẽ được đóng gói (tạo setup kit, installation guide) và giao cho khách hàng. Khách hàng sẽ kiểm tra lại lần cuối cùng - gọi là Acceptance Test - trước khi quyết định hoàn tất (Release) sản phẩm.

    Hệ thống lưu trữ và theo dõi bug của tester sẽ tập hợp, phân tích chu trình sống của sản phẩm theo bug/defect, tức là trong giai đoạn nào số lượng lỗi bao nhiêu, sao với các giai đọan khác tăng giảm bao nhiêu, tính hiệu của của developer trong việc sửa lỗi ... Những thống kê như vậy sẽ được tập hợp và dùng như là kinh nghiệm để đánh giá các sản phẩm mới sau này.

Thứ Hai, 20 tháng 8, 2007

Hướng dẫn quản trị mạng WindowsNT

Hướng dẫn quản trị mạng WindowsNT


Phần I - Giới thiệu Hệ điều hành Windows NT Server.

Windows NT Advanced Server là hệ điều hành độc lập với các nền tảng phần cứng (hardware platform), có thể chạy trên các bộ vi xử lý Intel x86, DEC Alpha, PowerPC có thể chạy trên cấu hình đa vi xử lý đối xứng, cân bằng công việc của các CPUs. Windows NT là hệ điều hành 32 bits thực sự với khả năng thực hiện đa nhiệm ưu tiên (preemptive multitasking). Hệ điều hành thực hiện phân chia thời gian thực hiện tiến trình cho từng ứng dụng một cách thích hợp. Windows NT Advanced Server bao gồm các khả năng đặc trưng mạng hoàn thiện.

I. Kiến trúc mạng

Tìm hiểu về mô hình tham chiếu OSI

Năm 1978, Tổ Chức Chuẩn Hóa Thế Giới OSI (International Organization for Standardization) đã phát triển một mô hình cho công nghệ mạng máy tính được gọi là Mô Hình Tham Chiếu Kết Nối Các Hệ Thống Mở (Open System Interconnection Reference Model) được gọi tắt là Mô Hình Tham Chiếu OSI. Mô hình này mô tả luồng dữ liệu trong một mạng, từ các kết nối vật lý của mạng cho tới các ứng dụng dùng cho người dùng cuối.

Mô Hình Tham Chiếu OSI bao gồm 7 tầng, như thể hiện trong hình dưới đây.

Tầng thấp nhất, Tầng Vật Lý (Physical Layer), là nơi các bit dữ liệu được truyền tới đường dây cáp (cable) vật lý. ở trên cùng là Tầng ứng Dụng (Application Layer), là nơi các ứng dụng được thể hiện cho người dùng. Hình vẽ phía dưới.

Tầng Vật Lý (Physical Layer) có trách nhiệm chuyển các bit từ một máy tính tới một tính khác, và nó quyết định việc truyền một luồng bit trên một phương tiện vật lý. Tầng này định nghĩa cách gắn cáp vào một bảng mạch điều hợp mạng (network adapter card) và kỹ thuật truyền dùng để gửi dữ liệu qua cáp đó. Nó định nghĩa việc đồng bộ và kiểm tra các bit.

Tầng Liên Kết Dữ Liệu (Data Link Layer) đóng gói thô cho các bit từ tầng vật lý thành các frame (khung). Một frame là một gói tin logic, có cấu trúc trong đó có chứa dữ liệu. Tầng Liên Kết Dữ Liệu có trách nhiệm truyền các frame giữa các máy tính, mà không có lỗi. Sau khi Tầng Liên Kết Dữ Liệu gửi đi một frame, nó đợi một xác nhận (acknowledgement) từ máy tính nhận frame đó. Các frame không được xác nhận sẽ được gửi lại.

Tầng Mạng (Network Layer) đánh địa chỉ các thông điệp và chuyển đổi các địa chỉ và các tên logic thành các địa chỉ vật lý. Nó cũng xác định con đường trong mạng từ máy tính nguồn tới máy tính đích, và quản lý các vấn đề giao thông, như chuyển mạch, chọn đường, và kiểm soát sự tắc nghẽn của các gói dữ liệu.

Tầng Giao Vận (Transport Layer) quan tâm tới việc phát hiện lỗi và phục hồi lỗi, đảm bảo phân phát các thông điệp một các tin cậy. Nó cũng tái đóng gói các thông điệp khi cần thiết bằng cách chia các thông điệp dài thành các gói tin nhỏ để truyền đi, và ở nơi nhận nó sẽ xây dựng lại từ các gói tin nhỏ thành thông điệp ban đầu. Tầng Giao Vận cũng gửi một xác nhận về việc nhận của nó.

Tầng Phiên (Session Layer) cho phép hai ứng dụng trên 2 máy tính khác nhau thiết lập, dùng, và kết thúc một phiên làm việc (session). Tầng này thiết lập sự kiểm soát hội thoại giữa hai máy tính trong một phiên làm việc, qui định phía nào sẽ truyền, khi nào và trong bao lâu.

Tầng Trình Diễn (Presentation Layer) chuyển đổi dữ liệu từ Tầng ứng Dụng theo một khuôn dạng trung gian. Tầng này cũng quản lý các yêu cầu bảo mật bằng cách cung cấp các dịch vụ như mã hóa dữ liệu, và nén dữ liệu sao cho cần ít bit hơn để truyền trên mạng.

Tầng ứng Dụng (Application Layer) là mức mà ở đó các ứng dụng của người dùng cuối có thể truy nhập vào các dịch vụ của mạng.

Khi hai máy tính truyền thông với nhau trên một mạng, phần mềm ở mỗi tầng trên một máy tính giả sử rằng nó đang truyền thông với cùng một tầng trên máy tính kia. Ví dụ, Tầng Giao Vận của một máy tính truyền thông với Tầng Giao Vận trên máy tính kia. Tầng Giao Vận trên máy tính thứ nhất không cần để ý tới truyền thông thực sự truyền qua các tầng thấp hơn của máy tính thứ nhất, truyền qua phương tiện vật lý, và sau đó đi lên tới các tầng thấp hơn của máy tính thứ hai.
Mô Hình Tham Chiếu OSI là một ý tưởng về công nghệ mạng, và một số ít hệ thống tuân thủ theo nó, nhưng mô hình này được dùng để thảo luận và so sánh các mạng với nhau.

II. Network Card Driver và Protocol làm gì?

Một network adapter card, tức bảng mạch điều hợp mạng, (đôi khi gọi là network interface card hay vắn tắt là NIC) là một bảng mạch phần cứng được cài đặt trong máy tính của bạn để cho phép máy tính hoạt động được trên mạng. Network adapter card cung cấp một (hoặc nhiều) cổng để cho cáp mạng được nối vào về mặt vật lý, và về mặt vật lý bảng mạch đó sẽ truyền dữ liệu từ máy tính tới cáp mạng và theo chiều ngược lại.

Mỗi máy tính trong mạng cần phải có một trình điều khiển (driver) cho network adapter card, đó là một chương trình phần mềm kiểm soát bảng mạch mạng. Mỗi trình điều khiển của network adapter card được cấu hình cụ thể để chạy với một kiểu bảng mạch mạng (network card) nhất định.

Cùng với các bảng mạch mạng và trình điều khiển bảng mạch mạng, một máy tính mạng cũng cần phải có một trình điều khiển giao thức (protocol driver) mà đôi khi gọi là một giao thức giao vận hay chỉ vắn tắt là giao thức. Trình điều khiển giao thức thực hiện công việc giữa phần mềm mạng ở mức trên (giống như trạm làm việc và máy chủ) và network adapter card. Giao thức đóng gói dữ liệu cần gửi đi trên mạng theo cách mà máy tính ở nơi nhận có thể hiểu được.

Qui trình kết hợp một trình điều khiển giao thức với network adapter card tương ứng, và thiết lập một kênh truyền thông giữa hai thứ đó gọi là kết gắn (binding).

Để hai máy tính truyền thông với nhau trên một mạng, chúng phải dùng cùng một giao thức. Đôi khi một máy tính được cấu hình để dùng nhiều giao thức. Trong trường hợp này, hai máy tính chỉ cần một giao thức chung là có thể truyền thông với nhau.

Trong một số mạng, mỗi trình điều khiển network adapter card và giao thức của máy tính là một phần mềm riêng. Trong một số mạng khác thì chỉ một phần mềm gọi là monolithic protocol stack thực hiện các chức năng của cả trình điều khiển network adapter card và giao thức.

III. Kiến trúc mở

Windows NT Advanced Server sử dụng hai chuẩn là NDIS (Network Driver Interface Specification) và TDI (Transport Driver Interface). NDIS là chuẩn cung cấp cho việc nói chuyện giữa card mạng (network card) và các giao thức (protocol) mạng được dùng. NDIS cho phép sử dụng nhiều giao thức mạng trên cùng một card mạng. Mặc định Windows NT Advanced Server được cung cấp sử dụng bốn giao thức đó là NetBEUI (NetBIOS Extended User Interface), TCP/IP, Microsoft NWLINK, và Data Link Control. TDI cung cấp khả năng nói chuyện giữa các giao thức mạng với các phần mềm mạng mức trên (như Server và Redirector).

IV. Ưu điểm của NDIS

Như trên đã nói NDIS cung cấp sự liên lạc giữa các giao thức mạng với card mạng. Bất cứ trạm làm việc nào (sử dụng hệ điều hành Windows NT Workstation) đều có thể các trình điều khiển điều khiển card mạng được cung cấp nội tại trong Windows NT Advanced Server. Trong trường hợp phải sử dụng một loại card mạng khác, tức là phải cần trình điều khiển cho card mạng không có sẵn trong Windows NT, NDIS vẫn có thể sử dụng đa giao thức mạng trên card mạng này.

Khi máy tính sử dụng đa giao thức mạng, các gói tin dữ liệu sẽ được chuyển đi thông qua giao thức mạng thứ nhất (giao thức này được gọi là primary protocol), nếu không được máy tính sẽ sử dụng tiếp giao thức thứ hai và cứ thế tiếp tục.
Trên mỗi máy tính được cài đặt Windows NT, mỗi một giao thức mạng được đặt sử dụng trên một card mạng cần phải được đặt một giá trị gọi là LAN adapter number trên card mạng đó.

V. Tìm hiểu về TDI

TDI là giao diện giữa tầng phiên (Session) và tầng giao vận (Transport). TDI được xây dựng với mục đích cho phép tầng giao vận có thể làm việc với các chương trình thuộc tầng trên (ví dụ như Server và Redirector) sử dụng chung một giao diện. Khi Server và Redirector tạo một lời gọi tới tầng giao vận, nó sẽ sử dụng giao diện TDI để thực hiện lời gọi này và do vậy nó không cần biết cụ thể giao thức tầng giao vận sẽ được sử dụng.

Windows NT sử dụng TDI nhằm mục đích đảm bảo rằng các hệ thống sử dụng các giao thức khác nhau, thậm chí cả các Server và Redirector được viết bởi các hãng khác nhau (Third parties) có thể làm việc được với Windows NT.

Sử dụng TDI đã làm cho Windows NT khắc phục nhược điểm của sản phẩm LAN manager 2.x đó là trong khi Windows NT không hạn chế số lượng các trạm làm việc nối vào Server thì LAN manager 2.x lại hạn chế ở con số 254 trạm làm việc.

Có một trường hợp ngoại lệ, cho dù TDI là chuẩn giao diện giữa tầng giao vận và các tầng mức trên song riêng đối với NetBIOS các trình điều khiển và các DLLs được sử dụng để thực hiện nhiệm vụ này

VI. Cách thức làm việc của các giao thức

1. NetBEUI

NetBEUI lần đầu tiên được đề cập tới vào năm 1985, đây là một giao thức mạng gọn nhẹ, nhanh. Khi được bắt đầu phát triển từ năm 1985, NetBEUI cho phép phân đoạn các mạng nhóm tác nghiệp từ 20 đến 200 máy tính, cho phép kết nối giữa các segment LAN với segment LAN khác hoặc với mainframe.

NetBEUI tối ưu hoá khả năng xử lý khi được sử dụng trên mạng LAN. Trên LAN, đây là giao thức mạng có cho phép lưu thông các gói tin nhanh nhất. Phiên bản NetBEUI được sử dụng cho Windows NT là NetBEUI 3.0 và có một số điểm khác với các phiên bản trước đó.

Loại trừ hạn chế 254 phiên làm việc của một Server trên một card mạng.
Hoàn thiện khả năng seft-tuning.
Khả năng xử lý trên đường truyền tốt hơn.

NetBEUI trong Windows NT là giao thức NetBIOS Frame (NBF) format. Nó sử dụng NetBIOS làm cách thức nói chuyện với các tầng mức trên. Hạn chế của NetBEUI là không có khả năng chọn đường và thực hiện kém hiệu quả trong môi trường mạng WAN. Do vậy thông thường để cài đặt mạng thường sử dụng phương pháp cài cả NetBEUI và TCP/IP để đáp ứng các chức năng thích hợp.

2. TCP/IP

TCP/IP (Transmission Control Protocol/Internet Protocol) được phát triển từ cuối những năm 1970, đó là kết quả của Defense Advanced Research Projects Agency (DARPA) nghiên cứu dự kết nối giữa các mạng với nhau.

Ưu điểm của giao thức TCP/IP là cung cấp khả năng kết nối giữa các mạng với hệ điều hành và phần cứng khác nhau.

TCP/IP tương thích với môi trường Internet, môi trường kết nối mạng của các trường đại học, các tổ chức, chính phủ, quân đội với nhau với nhau.

Với Windows NT có thể sử dụng hệ quản trị mạng SNMP để theo dõi sự hoạt động của máy tính sử dụng giao thức TCP/IP.

Microsoft thực hiện giao thức TCP/IP bằng cách sử dụng STREAMS - tương thích với môi trường giao diện, Windows NT sử dụng STREAMS như là một giao diện giữa tầng TDI và tầng thấp hơn.

Nhược điểm của TCP/IP là khả năng xử lý chậm hơn so với NetBEUI trong môi trường mạng LAN

3. NWLink

Microsoft NWLink là chuẩn NDIS tương thích với giao thức IPX/ SPX trong môi trường mạng Novell Netware. Tương tự TCP/IP, NWLink cũng sử dụng môi trường giao diện STREAMS. NWLink cho phép một Server Windows NT có thể "nhìn thấy" một Server Netware. Song để sử dụng các tài nguyên được chia sẻ trên Server Netware này nhất thiết vẫn phải chạy chương trình Netware Client.

4. Data Link Control

Data Link Control không bao giờ được đặt là primary protocol. Data Link Protocol được sử dụng nhằm các mục đích sau :

Cài đặt máy tính sử dụng Windows NT cho phép truy cập đến IBM@ mainframes.

Cài đặt máy in nối trực tiếp vào mạng, thay vì được nối vào cổng song song hay nối tiếp tại một print server nào đó.

Data Link Control cho phép các chương trình truy cập trực tiếp tới tầng Data Link trong mô hình tham chiếu OSI.

VII. Sử dụng RPC (Remote Procedure Call)

Windows NT cung cấp khả năng sử dụng RPC để thực thi các ứng dụng phân tán. Microsoft RPC bao gồm các thư viện và các dịch vụ cho phép các ứng dụng phân tán hoạt động được trong môi trường Windows NT. Các ứng dụng phân tán chính bao gồm nhiều tiến trình thực thi với nhiệm vụ xác định nào đó. Các tiến trình này có thể chạy trên một hay nhiều máy tính.

Microsoft RPC sử dụng name service provider để định vị Servers trên mạng. Microsoft RPC name service provider phải đi liền với Microsoft RPC name service interface (NIS). NIS bao bao gồm các hàm API cho phép truy cập nhiều thực thể trong cùng một name service database (name service database chứa các thực thể, nhóm các thực thể, lịch sử các thực thể trên Server).

Khi cài đặt Windows NT, Microsoft Locator tự động được chọn như là name service provider. Nó là name service provider tối ưu nhất trên môi trường mạng Windows NT.

VIII. Sử dụng Remote Access Service (RAS)

RAS cho phép remote User làm việc như là khi họ kết nối trực tiếp vào mạng. RAS là sự kết nối trong suốt với Microsoft Client và các ứng dụng trên mạng.

Windows NT RAS Server phiên bản 3.5 trở lên cung cấp giao thức PPP cho phép bất cứ PPP client nào đều có thể sử dụng TCP/IP, NetBEUI, IPX truy cập. Ngoài ra Windows NT client có thể sử dụng giao thức SLIP để thực hiện Remote Access Servers. Giao thức Microsoft RAS cho phép bất cứ Microsoft RAS client nào đều có thể truy cập sử dụng Dial-in.

Để truy cập vào WAN, Clients có thể sử dụng dial-in sử dụng chuẩn đường điện thoại thông qua một modem hoặc một modem pool. Nhanh nhất là sử dụng ISDN, ngoài ra có thể sử dụng X.25 hay RS-232 null modem. Microsoft RAS cho phép tối đa 256 clients dial-in.

Đối với mạng LAN, giao thức IP cho phép truy cập tới mạng TCP/IP (như mạng Internet). Giao thức IPX cho phép truy cập tới các Servers Novell Netware.

Windows NT Server Multi-Protocol Routing

Windows NT Server, kết hợp với Windows NT Server Multi-Protocol Routing, cho phép nối giữa các mạng cục bộ, giữa mạng cục bộ với mạng diện rộng mà không cần phải có một Router riêng biệt. Windows NT Server sử dụng cả hai RIP cho IP và RIP cho IPX.

Windows NT Server Multi-Protocol được cài đặt bằng cách chạy chương trình UPDATE.EXE từ đ*a hay CDROM. Chương trình này sẽ copy các tệp tin cần thiết để cài đặt.

Khả năng của Windows NT Server MPR
Sử dụng một RAS server để route giữa một client truy cập từ xa và một mạng LAN
Dưới đây là các yêu cầu cần thiết khi sử dụng Windows NT RAS như một dial-up rouuter giữa mạng LAN và Internet hoặc với TCP/IP enterprise.
1. Windows NT computer cần một card mạng và một modem tốc độ cao.
2. Sử dụng PPP nối vào Internet hoặc mạng TCP/IP enterprise.
3. Đặt đúng địa chỉ và subnet.
4. Cài đặt đúng Registry và Default Gateway để máy tính này thực hiện đồng như là một Router và là một Client của mạng LAN.

IX. Route giữa các LANs với nhau

Windows NT Server có thể được tăng cường bằng cách cài đặt khả năng routing giữa các mạng cục bộ với nhau và chức năng BOOTP/DHCP Relay Agent. Để cài đặt Route giữa các LANs với nhau thì Windows NT computer phải có tối thiểu 2 card mạng.

X. Route WAN

Không thể route giữa các mạng WAN thông qua chuyển mạch gói (switched circuits) hoặc đường điện thoại (dial-up lines). Khả năng route này chỉ thực hiện được khi có WAN card (ví dụ T1 hay Frame-Relay

XI. RIP routing cho IPX

RIP routing cho IPX cung cấp chức năng địa chỉ hoá cho phép các gói tin được gửi đi đến một đích định trước. Phiên bản này hiện nay chưa có bất kỳ một khả năng lọc nào cho việc chuyển tiếp các gói tin, bởi vậy tất cả các thực thể trong bảng RIP và SAP chọn đường cần phải được truyền bá. Trên mạng có phạm vi rộng vấn đề giải thông cho việc chuyển tiếp các gói tin cần phải được quan tâm. Internal routing không cho phép thực hiện thông qua đường điện thoại.

XII. RIP routing cho IP

Windows NT Server cung cấp RIP cho chức năng quản trị động bảng chọn đường giao thức IP (dynamic routing tables). Phiên bản RIP cho IP cũng không hoạt động được thông qua đường kết nối dial-up. RIP cho IP lặp lại các thông tin broadcast nên sử dụng UDP/IP thay thế cho TCP/IP.

XIII. Bảo vệ và quản trị hệ thống

Windows NT xây dựng hệ thống bảo vệ bên trong hệ điều hành. Tự thân điều khiển truy cập cho phép người sử dụng phân quyền tới từng tệp tin riêng lẻ, tự do điều khiển trên cơ sở các chức năng cơ bản của hệ thống.

Với khả năng cho phép cài đặt các domains và trust relationships, cho phép tập trung hoá việc quản trị Users và bảo vệ thông tin tại một địa điểm. Với khả năng này hệ thống mạng sẽ dễ dàng quản trị và vận hành.

XIV. Phương thức bảo vệ trên mạng

Cơ sở của sự bảo vệ và quản trị tập trung trong môi trường Windows NT Advanced Server là domain. Một domain là một nhóm các Servers cài đặt hệ điều hành Windows NT Advanced Server chứa cùng một tập hợp các User accounts. Do vậy thông tin về một User mới chỉ cần nhập tại một Server bất kỳ nhưng đều cho phép các Servers khác trong domain nhận ra.

Trust Relationship nối các domains với nhau, cho phép pass-through authentication. Điều này có nghĩa là người sử dụng chỉ cần có account trong một domain có thể truy cập tới các thực thể trên toàn mạng.

1. Domains : Đơn vị quản trị cơ bản

Việc nhóm các máy tính vào các domains đem lại hai cái lợi chính cho người quản trị mạng và người sử dụng. Cái quan trọng nhất đó là tất cả các Servers trong một domain được xem như là một đơn vị quản trị đơn chia sẻ khả năng bảo vệ và thông tin về người sử dụng. Mỗi một domain có một cơ sở dữ liệu (database) lưu trữ thông tin về User account. Mỗi một Server trong domain lưu trữ một bản copy database. Do đó Windows NT Advanced Server tiết kiệm cho người quản trị mạng cũng như người sử dụng thời gian và đem lại các kết quả thích đáng. Cái lợi thứ hai đó chính là sử thuận tiện cho người sử dụng.

2. Trust Relationship : nối giữa các domains Bằng cách thiết lập Trust Relationship nối giữa các domains trên mạng với nhau cho phép các User accounts và global group được sử dụng trên nhiều domains thay vì chỉ trên một domain. Khả năng này làm cho công việc của người quản trị mạng trở nên dễ dàng hơn, họ chỉ cần tạo account cho người sử dụng trên một domain song vẫn có thể truy cập tới các máy tính của các domains khác chứ không riêng gì các máy tính trong cùng một domain.

Việc thiết lập Trust Relationship có thể theo một chiều hoặc hai chiều. Trust Relationship hai chiều là một cặp của Trust Relationship một chiều, ở đó mỗi domain tin tưởng vào domain khác.

3. Hoạt động của domain: Yêu cầu tối thiểu cho một domain là phải có domain controller và lưu trữ bản copy chính (master copy) của User và group database. Tất cả các thông tin thay đổi trong database này phải được thực hiện trên domain controller, tức là bất cứ sự thay đổi User database trên một Server nào trong domain sẽ được tự động cập nhật lại trong domain controller. Domain account database được sao lưu trên tất cả các Server cài đặt Windows NT Advaced Server.

Cứ 5 phút một lần các Servers lại gửi query lên domain controller hỏi xem có sự thay đổi gì không. Nếu có sự thay đổi, domain cntroller gửi thông tin bị thay đổi (chỉ có thông tin bị thay đổi mới được gửi) tới các Servers trong domain. Để đảm bảo hệ thống hoạt động liên tục, cách tốt nhất là tạo thêm backup domain controller cho domain controller chính.

4. Các kiểu domain: Có bốn kiểu domains được đưa ra để tổ chức hệ thống mạng đó là single domain, master domain, multiple master domain, complete trust domain.

Single domain

Nếu như hệ thống mạng không có quá nhiều User do đó không cần phải chia nhỏ việc tổ chức bằng các sử dụng kiểu domain đơn giản nhất đó là simple domain. Mạng máy tính khi đó chỉ có một domain duy nhất và không cần đặt Trust Relationship. Mô hình này không phức tạp rất phù hợp đối với mạng có quy mô nhỏ.

Master domain

Trong trường hợp phải phân chia mạng thành các domains cho những mục đích khác nhau song quy mô của mạng lại đủ nhỏ thì lựa chọn tốt nhất là sử dụng master domain. Mô hình này cho phép quản lý tập trung nhiều domains. Trong mạng sử dụng master domain cần có một master domain trong đó tạo tất cả Users và global groups.

Tất cả các domains khác trên mạng phải "trust" vào master domain này và như vậy có thể sử dụng Users và global groups được tạo ra như trên đã nói. Có thể hiểu rằng master domain là một accounts domain, với mục đích chính là quản lý các User accounts của mạng, các domain còn lại được xem như là các domain tài nguyên tức là không lưu trữ các User accounts mà đơn giản chỉ cung cấp các tài nguyên.

Multiple master domain

Đối với một quy mô lớn hơn, rộng hơn kiểu master domain không thể đáp ứng được khi đó có thể cách tốt nhất là sử dụng Multiple Master Domain. Mô hình này bao gồm một số (đủ nhỏ) các master domains, mọi User accounts được tạo ra trên một master domain trong số các master domains trên mạng.

Các domain khác không phải là master domain (gọi là các department domain) sẽ là các domain tài nguyên. Mỗi một master domain cần phải "trust" vào tất cả các master domains khác. Mọi department domain khi đã "trust" vào một master domain sẽ "trusts" tất cả các master domains khác. Nhược điểm chính của mô hình này là đòi hỏi nhiều sự quản lý Trust Relationship.

Complete trust domain

Trong trường hợp yêu cầu phải quản lý các domains phân tán trên các departments thì mô hình Complete Trust Domain là rất phù hợp. Với Complete trust domain, mỗi một domain "trust" vào domain khác, tức là mỗi một domain có một Users và global groups riêng của mình nhưng các Users và global groups này vẫn có thể được sử dụng trên các domain khác trong mạng. Như vậy giả sử có n domains trên mạng sẽ có n*(n-1) Trust Relationship.

XV. Quản trị môi trường người sử dụng

Trong hệ điều hành mạng Windows NT Advanced Server có nhiều cách để quản lý môi trường người sử dụng. Phương pháp được sử dụng nhiều nhất để quản lý môi trường người sử dụng đó là thông qua các User profiles. Một profile là một tệp phục vụ như một bản chụp nhanh của môi trường làm việc hiện thời của người sử dụng (User desktop environment). Với các profiles có thể hạn chế khả năng của người sử dụng, thay đổi các tham số được đặt tại trạm làm việc riêng của họ.

Phương pháp thứ hai để quản lý đó là sử dụng lập các logon scripts cho các Users. Nếu mỗi một User có một logon script thì có nghĩa là script sẽ được chạy bất cứ khi nào User này logon vào hệ thống tại bất cứ trạm làm việc nào trên mạng. Script có thể là một tệp tin dạng lô (batch file) chứa đựng các câu lệnh của hệ điều hành hoặc các chương trình chạy. Cách khác có thể cung cấp cho mỗi người sử dụng một thư mục riêng (home directory) trên Server hay tại Workstation.

Một home directory của một User là một vùng lưu trữ riêng của người sử dụng này và họ có toàn quyền trên đó. Ngoài ra có thể đặt các biến môi trường cho mỗi trạm làm việc. Các biến môi trường này xác định sự tìm kiếm đường dẫn của trạm làm việc, thư mục, các tệp tạm thời hay các thông tin tương tự khác.

XVI. Quản lý hệ thống tệp trên mạng

Một vấn đề quan trọng khi sử dụng các Servers trên mạng là sự chia sẻ các tệp tin và các thư mục. Hệ điều hành Windows NT Advanced Server cung cấp khả năng xử lý cao, an toàn và bảo mật cho các tệp tin được chia sẻ nhất là khi sử dụng cấu trúc hệ thống tệp NTFS (Windows NT File System).

Phân quyền truy cập các tệp tin và thư mục trên ổ đ*a NTFS đảm bảo rằng chỉ có những người sử dụng thích hợp mới có khả năng truy cập theo quyền hạn được phân ở các mức khác nhau. Với Windows NT Advanced Server các tệp tin và các thư mục trên ổ đ*a NTFS chịu sự kiểm tra kỹ càng.

Một khái niệm khác được nhắc tới ở đây đó là file ownership, mỗi một tệp tin và thư mục đều có một người chủ có thể điều khiển nó tất cả các người khác muốn truy cập đều phải được sự cho phép của người chủ này. Windows NT Advanced Server cung cấp chức năng sao lưu thư mục. Với dịch vụ Replicator, có thể duy trì bản sao của hệ thống tệp hiện thời phục vụ khi có sự cố xảy ra đối với hệ thống tệp chính.

XVII. An toàn dữ liệu

1. Quản lý khôi phục sự cố

Fault tolerance là khả năng đảm bảo cho hệ thống tiếp tục thực hiện chức năng của mình khi một phần gặp sự cố. Thông thường khái niệm Fault tolerance được nhắc tới nhằm mô tả hệ thống đ*a lưu trữ (disk subsystems) song nhìn một cách tổng thể nó còn được ứng dụng cho các phần, thực thể khác của hệ thống. Một cách đầy đủ hệ thống Fault tolerance bao gồm disk subsystems, nguồn cung cấp và hệ thống các bộ điều khiển đ*a dư thừa (redundant disk controllers).

2. Tìm hiểu về RAID

Hệ thống Fault tolerance ổ đ*a được chuẩn hoá bao gồm sáu mức từ 0 đến 5 được biết đến như là Redundant Arrays of Inexpensive Disks (RAID). Mỗi một mức là sự kết hợp của khả năng xử lý, an toàn và giá thành.

Mức 0
Thông thường được biết đến là disk striping và sử dụng hệ thống tệp tin gọi là stripe set. Dữ liệu được chia thành các khối và được trải khắp trên các đ*a cố định (fixed disk) theo một thứ tự định trước.

Mức 1

Được biết đến là disk mirroring sử dụng hệ thống tệp tin gọi là mirror set. Tất cả dữ liệu được ghi trên đ*a thứ nhất đều được ghi lại giống hệt trên đ*a thứ hai. Do vậy chỉ sử dụng được 50 phần trăm dung lượng lưu trữ. Khi một đ*a gặp sự cố, dữ liệu sẽ được lấy từ đ*a còn lại.

Mức 2

Phương pháp sử dụng thêm mã error-correcting. RAID mức 2 chia các tệp tin thành các bytes trải khắp trên nhiều đ*a. Phương pháp error-correcting yêu cầu tất cả các các đ*a đều phải lưu thông tin error-correcting.

Mức 3

Tương tự như mức 2, nhưng chỉ yêu cầu một đ*a để lưu trữ dữ liệu parity (thông tin error-correcting).

Mức 4

Xử lý dữ liệu với kích cỡ của các khối (blocks) và các đoạn (segments) lớn hơn so với mức 2 và mức 3. Nó lưu trữ thông tin error-correcting trên một đ*a tách rời dữ liệu của người sử dụng.

Mức 5

Được biết đến với cái tên striping and parity. Đây là loại thông dụng. RAID 5 tương tự như RAID 4 nhưng thông tin parity được ghi không phải chỉ trên một đ*a mà là trên tất cả các đ*a. Điều đó có nghĩa là có hai loại thông tin trên một đ*a.

3. Quản lý UPS (Uninterrupt Power Supplies)

Có hai cách thức sử dụng UPS là online và standby.

Online : Sử dụng online UPS kết nối trung gian giữa máy tính và nguồn điện, khi đó UPS trở thành đơn vị cung cấp nguồn chính.

Standby : UPS được sử dụng nối giữa máy tính và nguồn cung cấp, song UPS được sử dụng ở trạng thái chờ đợi sẵn sàng hoạt động bất cứ khi nào có sự cố về nguồn.
Windows NT Advanced Server sử dụng UPS service để theo dõi trạng thái của UPS cung cấp các thông tin đầy đủ của UPS cho người quản trị mạng.

XVIII. Hệ sao lưu dữ liệu Windows NT Advanced Server cung cấp tiện ích tape backup, cho phép sao lưu dữ liệu tập trung tất cả các ổ đ*a của các máy tính trên mạng chạy trên các hệ điều hành khác nhau từ Microsoft LAN Manager 2.x, Windows NT Workstation, Windows for Workgroup đến các máy chủ được cài đặt Windows NT Advanced Server khác.

[size=8]XIX. Clustering

1. So sánh với Fault Tolerant

Ưu điểm của Cluster so với Fault Tolerant là ở chỗ trong khi Fault Tolerant xây dựng khả năng làm việc với mức độ cao của thiết bị chính thì thiết bị backup lại ở trạng thái chờ (idle) chỉ bắt đầu hoạt động khi thiết bị chính gặp lỗi. Đối với Cluster không như vậy, trong khi hệ thống chính vấn thực hiện với mức độ cao thì hệ thống backup cũng thực hiện song song đồng thời kết hợp với hệ thống chính cùng chia sẻ tài nguyên Cluster.

Windows NT Cluster là một giải pháp phần mềm phù hợp với giá mà người sử dụng phải trả để có được một hệ thống có khả năng thay đổi dễ dàng mềm dẻo đồng thời đảm bảo được sự ổn định an toàn của hệ thống.

2. Giới thiệu kỹ thuật Các ứng dụng Cluster được xây dựng theo mô hình Client/Server, luồng công việc được chia thành các đơn vị nhỏ được thực hiện trên các máy khác nhau.
Windows NT Cluster được thiết kế tương thích với các chuẩn được xây dựng từ trước trong Windows NT, các tiện ích quản trị mạng không cần phải có sự thay đổi nào khi hoạt động trên hệ thống Windows NT.

3. Mô hình phần cứng

NT Cluster được thiết kế theo chuẩn công nghiệp các vi xử lý có thể là Intel hoặc RISC, các kỹ thuật mạng cục bộ thông dụng, các giao thức giao vận như IPX/SPX, TCP?IP, xây dựng theo phương pháp Module hoá dễ dàng mở rộng phát triển. Windows NT Cluster được xây dựng điều khiển tập trung nhằm cung cấp kỹ thuật cluster mang lại nhiều tiện lợi nhất. Mục đích của việc thiết kế này là nhằm đưa ra một sản phẩm bao hàm tất cả các khía cạnh xu hướng phát triển của phần cứng bao gồm các vi xử lý, kết nối giữa các hệ thống lưu trữ.

Tất cả các vi xử lý trong hệ Cluster đều phải chạy hệ điều hành Windows NT, hiện tại hệ Cluster chỉ support cho hệ thống trong đó các máy chủ phải có dòng vi xử lý giống nhau. Trong tương lai việc hoà trộn các loại máy chủ trong cùng một hệ thống là một mục tiêu quan trọng. Có hai kiểu kết nối trong Windows NT Cluster là kết nối Processor-to-Processor và kết nối Processor-to-Storage.

Với kết nối Processor-to-Processor, Windows NT sử dụng phương thức giao vận nội tại trong hệ điều hành để thực hiện việc liên lạc như giao thức TCP/IP, IPX/SPX. Các giao thức này hoạt động được trên các chuẩn mạng như Ethernet, FDDI, ATM, Token Ring ..v..v..

4. Mô hình phần mềm

Windows NT Cluster được xây dựng theo mô hình Client/Server phân rã về mặt chức năng các ứng dụng hoặc giải pháp giữa các hệ thống. Windows NT Cluster đòi hỏi một client User interface phải khởi tạo một phép xử lý hoặc một dịch vụ được cung cấp bởi một hay nhiều máy chủ trong hệ thống. Với Windows NT Cluster, kiểu Partitioned data được thiết kế trong đó luồng công việc thực hiện chung được chia nhỏ thành các segments, mỗi segment sẽ được điều khiển cục bộ tại một nhân tố tạo thành hệ cluster.

Kiểu Shared data lại hoạt động theo nguyên tắc khác. Luồng công việc vẫn nguyên khối không bị chia nhỏ mà hoạt động trên toàn bộ hệ thống với việc lập biểu điều khiển thực hiện phân tán. Windows NT Cluster ngoài ra còn cung cấp các APIs cho phép xây dựng các ứng dụng trên hệ cluster trong cả hai chế độ của Windows NT là User mode và kernel mode. Windows NT là giải pháp server-oriented, client không cần biết tới có bao nhiêu nhân tố tạo thành hệ cluster. Client sẽ làm việc với server cung cấp cho nó cách thức tốt nhất xử lý tài nguyên trên mạng. Sử dụng kiểu partitioned data sẽ đảm bảo việc cân bằng công việc giữa các server tốt nhất.

5. Quản trị hệ thống Cluster

Cluster hoạt động kết hợp với một trình quản trị chung và với security domain. Các khả năng này đều tồn tại trong các sản phẩm khác nhau của bộ Windows NT. Trình quản trị account và security chung được cung cấp bởi Windows NT Server Domain. Việc quản trị các phần mềm hoạt động phân tán được thực hiện qua Systems Management Server.

Hệ quản trị Windows NT Cluster sẽ tập hợp các khả năng lại tạo thành bộ công cụ cho phép quan trị cluster như một hệ thống đơn lẻ. Hệ quản trị Cluster được thiết kế với giao diện đồ hoạ, quản lý tập trung tài nguyên và các dịch vụ trong hệ thống cluster.

6. Mô hình truy cập dữ liệuNhư trên đã trình bày Windows NT Cluster đưa ra hai phương thức truy cập dữ liệu là Partitioned data và Shared data. Trong đó mô hình phân chia mọi thứ phù hợp với hệ thống xử lý đối xứng, luồng công việc được đồng bộ xử lý trên toàn hệ thống. Mô hình Partitioned data được thực hiện trên hệ thống không đối xứng, luồng công việc được chia thành các đơn vị công việc riêng rẽ được thực hiện trên các phần khác nhau.


Thứ Hai, 6 tháng 8, 2007

Shellcode thần chưởng: nhập môn

The most powerful of buffer overflows are never going to be in worms. Custom exploits are what gets you in, and what keeps you in. If you see a truly top notch hacker going after someone, he'll have a complete mirror of the target hosts' environments, all for one purpose: To create a buffer overflow he only plans on using once. ---Dave Aitel
Lỗi tràn bộ đệm. Blog bảo mật thông tin mà không có một bài nào về lỗi tràn bộ đệm giống như một anh tiều phu mà chẳng sắm nổi một chiếc rìu. Nghĩ vậy nên từ khi mới bắt đầu viết blog, tôi đã dự tính sẽ làm một loạt bài về lỗi tràn bộ đệm. Vấn đề còn lại là viết như thế nào để những người mới bắt đầu có thể hiểu được một đề tài khá phức tạp như lỗi tràn bộ đệm? Có rất nhiều tài liệu tiếng Anh và tiếng Việt về đề tài này nhưng chúng luôn yêu cầu người đọc phải có một trình độ nhất định về C, Assembly hay debug với gdb, những lĩnh vực mà những người mới bắt đầu khó lòng nắm vững. Thật ra muốn hiểu rõ lỗi tràn bộ đệm, bạn không cần phải cực kì thông thạo C hay Assembly mà chỉ cần học một phần rất nhỏ trong hai ngôn ngữ khó nuốt này mà thôi. Thực tế bạn chỉ cần học C và Assembly đủ để viết shellcode. Nhưng...shellcode là cái gì mới được chứ?

Có khá nhiều định nghĩa về shellcode:
Shellcode, là đoạn chương trình giúp bạn có được...một cái shell. Thế shell là cái gì? Theo Wikipedia, shell là một phần mềm cung cấp một giao diện dòng lệnh (command line interface) giúp bạn có thể tương tác với hệ điều hành. Shell sẽ nhận lệnh của bạn, gửi xuống phần lõi (kernel) của hệ điều hành để thực thi, rồi nhận kết quả trả về và gửi lại cho bạn. Có thể hiểu nôm na rằng, có shell trên một máy tính nào đó có nghĩa là bạn có quyền thực thi lệnh trên máy tính đó.
Shellcode là payload của các đoạn mã khai thác lỗ hổng bảo mật (exploit). Khi viết exploit, bạn phải giải quyết hai vấn đề chính: a) injection vector: xác định cách chèn shellcode vào trong hệ thống muốn tấn công; b) payload: xác định shellcode mà bạn muốn chạy trên hệ thống đó. Shellcode có thể làm được mọi thứ, từ việc điều chỉnh giở hệ thống hay download và thực thi một file từ Internet cho đến gửi một email ra ngoài. Mục tiêu chính của các exploit là làm sao có thể chạy được shellcode nằm trong phần payload của nó.
Shellcode còn được gọi là bytecode, tạm dịch là mã máy. Chúng ta đều biết mã máy là thứ ngôn ngữ duy nhất mà bộ vi xử lí có thể hiểu được. Tất cả các chương trình viết bằng bất kì ngôn ngữ nào đều phải được biên dịch sang mã máy trước khi máy tính có thể chạy được chương trình đó. Khác với các chương trình này, shellcode được thể hiện như một nhóm các mã máy, do đó máy tính có thể hiểu và thực thi trực tiếp shellcode mà không cần phải trải qua bất kì công đoạn biên dịch nào cả.
Như vậy muốn viết được shellcode, tôi phải học cách viết mã máy? Câu trả lời là không. Không ai trực tiếp viết ra mã máy khi muốn tạo shellcode. Thay vào đó, bạn có thể: a) sử dụng các shellcode có sẵn trên Internet; b) viết bằng C, dịch sang Assembly rồi tiếp tục dịch sang mã máy; c) viết bằng Assembly rồi dịch luôn ra mã máy.

Đối với cách a), tin vui là có rất nhiều thư viện shellcode trên Internet, thậm chí có một số chương trình cho phép bạn tạo shellcode và viết exploit bằng một ngôn ngữ cao cấp như Python hay Ruby. Tin buồn là nếu bạn nhào vào sử dụng liền các shellcode có sẵn mà không tìm hiểu chúng, bạn có thể bị gài bom. Nên nhớ rằng, shellcode có thể làm được tất cả mọi chuyện, hành động lấy shellcode từ Internet rồi chạy mà không thật sự hiểu shellcode đó làm gì giống như việc chạy các file .exe nhận được từ một người lạ mặt! Đến một lúc nào đó, bạn sẽ sử dụng các chương trình tạo shellcode tự động kể trên để đơn giản hóa việc viết exploit nhưng trước mắt, bạn cần phải tự viết được shellcode đã.

Trong tài liệu này chúng ta sẽ sử dụng luân phiên hai cách b) và c) để viết shellcode. Bạn nên sử dụng cách b) khi mới bắt đầu hoặc khi cần phải triển khai một loại shellcode phức tạp. Nhìn vào hai cách này, bạn có thể thấy rằng viết shellcode đòi hỏi phải có sự thông hiểu về ngôn ngữ Assembly của kiến trúc máy tính mà bạn dự định sẽ chạy shellcode trên đó. Đây là điều hiểu nhiên bởi lẽ các loại máy khác nhau (x86, x86-64, sparc, ppc, amd hay mips...) chỉ hiểu được một nhóm mã máy khác nhau. Ngoài ra, bạn còn phải thông hiểu cách giao tiếp với hệ điều hành (linux, windows, solaris hay freebsd...) để có thể thực thi được lệnh trong shellcode. Thông thường, bạn cần phải có một phiên bản shellcode khác nhau cho mỗi loại hệ điều hành chạy trên mỗi loại kiến trúc phần cứng khác nhau. Nói cách khác, shellcode phụ thuộc vào hệ điều hành và kiến trúc phần cứng.

Bạn vẫn còn đang đọc bài này đó chứ :p? Nếu có bất kì chỗ nào còn mù mờ, bạn nên đọc lại từ đầu và đừng ngại hỏi nếu bạn muốn. Những gì tôi trình bày về shellcode từ đầu đến giờ là những ý quan trọng nhất về shellcode, nếu bạn chỉ muốn biết shellcode để nói chuyện cho vui thì bạn có thể dừng lại ở đây. Còn nếu bạn muốn tự viết cho mình những đoạn shellcode tối ưu thì hãy đi tiếp cùng tôi nhé.

Trong bài tiếp theo, tôi sẽ trình bày những kiến thức căn bản về Assembly đủ để bạn có thể hiểu và viết được shellcode đầu tiên của mình. Sau đó tôi sẽ đề cập đến hai trở ngại quan trọng nhất mà bạn cần phải vượt qua khi viết shellcode: vấn đề địa chỉ ô nhớ (addressing problem) và vấn đề của các byte có giá trị null (null byte problem). Chúng ta cũng sẽ thảo luận sơ lược một số ví dụ về shellcode trên kiến trúc máy Intel 32-bit (còn gọi là x86).

Tôi cần chuẩn bị những gì để học viết shellcode?

Như đã nói từ đầu, bài viết này không yêu cầu bạn phải có kiến thức trước về Assembly hay C. Yêu cầu duy nhất là bạn phải có sự khao khát học hỏi cái mới. Ngoài ra, tôi sử dụng Ubuntu Linux trên máy x86 để viết các shellcode mẫu trong bài này, do đó bạn cũng cần phải chuẩn bị một máy tính có cấu hình tương tự (Linux-x86) như tôi. Bạn chọn distro nào cũng được, nhưng tốt nhất là nên chọn Ubuntu như tôi luôn. Các phần mềm khác mà bạn cần phải chuẩn bị:
nasm là bộ phần mềm bao gồm một assembler tên nasm và một disassembler mang tên ndisasm. nasm dùng để biên dịch các mã lệnh Assembly sang mã máy, còn ndisasm làm công việc ngược lại.
gdb là phần mềm giúp bạn debug (bắt lỗi) hoặc disassemble các chương trình viết bằng C. gdb thường có sẵn trong distro của bạn.
objdump là công cụ giúp bạn xem các thông tin quan trọng trong các file object hay file executable. Tương tự như gdb, objdump thường có sẵn trong distro của bạn.
strace là công cụ xem các syscall (tôi sẽ giải thích khái niệm này sau) mà một chương trình gọi khi nó được thực thi.

Nền tảng .Net

Tổng quan về Microsoft .NET
February 23rd, 2006

Trong thế giới điện toán, những cải tiến và thay đổi vẫn thường xuyên xảy ra. Đây là những biến đổi tất yếu và có tác động thúc đẩy sự phát triển. Một thách thức đối với bất kì nhà lập trình hay những công việc chuyên về CNTT [1] nào là theo kịp những biến đổi liên tục và những sự phát triển trong công nghệ.

Như một nhà quản lí doanh nghiệp hay người đưa ra các quyết định, sự am hiểu về công nghệ và tác động của nó đối với công việc kinh doanh nhiều lúc làm cho bạn cảm thấy nản lòng. Tuy nhiên, những thay đổi thường xuyên nhất trong công nghệ luôn đem lại cho bạn thành quả tốt nhất. Ngày nay, do công nghệ thông tin liên tục phát triển, cho nên những nền tảng của công nghệ đó có thể thay đổi để điều tiết những sự phát triển mới và những nhu cầu mới trên thương trường. Thậm chí một vài nǎm trở lại đây, chỉ có một số ít người biết đến Internet. Ngày nay, Internet đã thâm nhập hầu như mọi nơi mọi chỗ trong cuộc sống của chúng ta.

Sự khởi xướng ý tưởng .NET là một bước đột phá mới của Microsoft. Nó bao hàm nhiều quan niệm hiện hữu và những triết lý. Microsoft đưa ra công nghệ mà nó cho phép ý tưởng .NET trở thành hiện thực. Bài báo này sẽ cung cấp cho bạn một cái nhìn tổng thể về .NET, nó rất có ý nghĩa cho thế giới CNTT và nhất là cho Internet.
Định nghĩa .NET

Để bắt đầu công việc khảo sát .NET, chúng ta phải xác định rõ ranh giới công việc cần thực hiện. Vì .NET có nghĩa một nền tảng hơn là một sản phẩm đơn lẻ, cho nên cách định nghĩa nó có thể đa dạng, có phần hơi khó hiểu và mơ hồ. Một cách đơn giản .NET được định nghĩa dưới dạng một khung ứng dụng (application framework). .NET cung cấp một khung cho những ứng dụng nào được xây dựng; nó xác định những ứng dụng truy nhập các hàm như thế nào qua các hệ thống và các mạng. .Net cung cấp một nền tảng mà trên đó các giải pháp và các dịch vụ Web có thể được xây dựng, một nền tảng giải phóng những sự ràng buộc và tự bản thân nó giải phóng khỏi Microsoft Windows (về mặt kĩ thuật). Nói cách khác, .NET là một cách để xây dựng các ứng dụng và các dịch vụ mà nó hoạt động không phụ thuộc vào một nền tảng (platform) nào. Đây là một cách để tạo ra các trao đổi thông tin (truyền thông) giữa những hệ thống đa dạng và các ứng dụng cũng như tích hợp nhiều thiết bị vào trong việc trao đổi thông tin này.

Với cái nhìn tổng thể, bạn có thể đặt câu hỏi “Ai quan tâm đến vấn đề này?“. Xét cho cùng, Internet là một phương tiện truyền thông không thể tin nổi cho phép thực hiện thương mại điện tử. Trong khi đây là thực tế, thì một cái nhìn khác về Internet và thương mại điện tử là điều cần thiết. Ngày nay Internet cung cấp những giải pháp thương mại điện tử thực sự hiệu quả, nhưng trước hết chúng ta hãy khảo sát mô hình của Internet. Internet hoạt động trên mô hình khách/chủ (client/server) mà ở đó những khách hàng (client) phải tương tác với các máy phục vụ (server) để xem dữ liệu. Những trình duyệt đã được phát triển để thông dịch mã HTML[2] và trả lại trang Web cho người dùng. Về cơ bản việc sử dụng trình duyệt và Internet là công việc không thể thay đổi. Bạn có thể nhập thông tin vào trong các CSDL[3] thông qua trình duyệt của bạn, nhưng phần lớn bạn không thể điều khiển việc sử dụng hay thao tác thông tin. Bạn phải tương tác với các máy phục vụ Web và các CSDL của chúng, và nhiều ứng dụng Web thường không tương thích. Nếu bạn sử dụng những thiết bị truy nhập Internet khác nhau như PC hay cell phone thì cách sử dụng những thiết bị đó là rất khác nhau. Những thiết bị này không tích hợp tốt với nhau, thậm chí ngay cả trên Internet. Từ một viễn cảnh công việc kinh doanh, nhiều công nghệ thương mại điện tử để lại những hệ thống đang tồn tại đằng sau chúng, đây quả là một vấn đề tốn kém và khó khǎn.

Ý tưởng .NET được thiết kế để hỗ trợ chúng ta tiến tới một Web thân thiện hơn, tích hợp tốt hơn, một nơi mà ở đó các ứng dụng và các quá trình giao dịch có thể tương tác với nhau một cách tự do không phụ thuộc vào chương trình và nền tảng. Tóm lại, .NET làm cho thông tin trên Web có thể được tiếp cận một cách dễ dàng: bạn có thể sử dụng bất kì thiết bị nào, trên bất kì nền tảng nào. .NET còn có thể hỗ trợ các hệ thống máy phục vụ và ứng dụng liên lạc với nhau một cách thông suốt (seamlessly) và xây dựng hệ thống tính toán phân tán trên Web, làm cho Web trở thành một nơi tương tác nǎng động hơn giữa các dịch vụ Web, các ứng dụng và khách hàng.

Làm thế nào Microsoft có thể hoàn thành mục tiêu này? Chúng ta có thể thấy ngay được kết quả thông qua các sản phẩm và các dịch vụ mà khách hàng mua hàng nǎm. Mục tiêu của .NET có trở thành hiện thực hay không vẫn còn bỏ ngỏ, nhưng hiện tại thì Microsoft đang bận bịu với công việc phát triển các công cụ và những chiến lược để làm cho .NET trở thành hiện thực. .NET được thực thi thông qua .NET framework và các công cụ, hoặc thông qua các các khối (block) hợp nhất và các dịch vụ như Microsoft Visual Studio .NET. Hiện Microsoft đang tǎng số lượng các cộng sự và các nhà phát triển và họ đang tạo ra các sản phẩm bổ xung hữu ích cho việc thực thi .NET (.NET Implementation). Microsoft Windows XP là một trong những hệ điều hành đầu tiên được thiết kế để bắt đầu giới thiệu ý tưởng .NET.

Bước ra khỏi chiếc giếng và những giấc mơ con

Tất cả có thể bắt đầu bằng một ước mơ – ước mơ không đi chậm hơn phần còn lại của thế giới. -Ngô Quang Hưng
Việt Nam gia nhập WTO, người ta nói nhiều về chuyện "làm thuyền to ra biển lớn" của các ngành nghề khác nhau, vậy mà tuyệt nhiên lại không thấy nhắc đến việc gia nhập WTO của khoa học và đại học Việt Nam:
Áp lực đè nặng lên nhà khoa học ở các nước là sự xuất hiện trên các diễn đàn khoa học danh tiếng trên thế giới. Không phải để lấy danh, mà là lẽ sống, là niềm đam mê, và vì nếu không nghiên cứu khoa học ở tầm quốc tế như thế, nhà trường không thể đào tạo ra những sản phẩm có chất lượng.

Vậy, tại sao trong khi giới doanh nhân của ta đang phải nhảy lên các sân chơi quốc tế, nắm rõ luật chơi và đẳng cấp các đối thủ của mình, thì những "nhà trí thức" vẫn còn luẩn quẩn ở sân nhà và bằng lòng với luật chơi của mình?
Bảo mật là một ngành khoa học kĩ thuật và nó cũng chịu chung số phận với các ngành khoa học kĩ thuật khác ở VN: nhập siêu. Chúng ta đóng góp quá ít vào kho tàng tri thức chung của cộng đồng bảo mật trên thế giới so với những gì chúng ta nhận được từ họ. Số người VN được cộng đồng làm bảo mật trên thế giới biết đến chưa đếm hết đầu ngón tay. Tổng cộng số bài viết của người VN đăng trên tạp chí Phrack từ ngày nó ra đời cho đến khi nó đăng số cuối cùng là 1. Chưa có người VN nào từng trình bày tham luận tại BlackHat. Vâng chúng ta có cả một cộng đồng làm bảo mật với những BKIS, HVA, VSEC...nhưng câu hỏi đau lòng là ra khỏi ranh giới VN, có ai biết đến cái cộng đồng này không?

Hồi bé, không nhớ là ai đã dạy hay tôi đã xem ở đâu đó mà mỗi lần có ai hỏi "Lớn lên con muốn làm nghề gì?", tôi liền trả lời ngay "Con muốn làm nhà bác học", mặc dầu chắc chắn 100% lúc đó tôi cũng chỉ biết bác học đồng nghĩa với việc trở thành một người như ông Charles Darwin với câu nói nổi tiếng "Bác học không có nghĩa là ngừng học". Nhưng tại sao bác học lại không có nghĩa là ngừng học? Anh Ngô Quang Hưng đã có câu trả lời đầy cảm hứng:
Đến đây thì tôi nhận ra rằng câu hỏi “học bao nhiêu là đủ?” là câu hỏi sai. Đáng lẽ ta phải hỏi “học cái gì thì cho ta pleasure?” Với tôi, “thú vị và sâu sắc” là một nguồn pleasure vô tận.
Bác học không có nghĩa là ngừng học là như thế đấy. Anh Hưng nhắc đến "thú vị và sâu sắc" như là một nguồn pleasure vô tận còn tôi thì nghĩ đến khao khát đóng góp vào kho tàng tri thức của nhân loại cũng là một nguồn pleasure dồi dào không kém, là khởi nguồn của mọi sự sáng tạo!

Vậy phải chăng bạn và tôi, những người VN tự nhận mình đang làm bảo mật, không có đủ sự khao khát cống hiến? Không. Tôi nghe rõ điều đó dầu bạn không nói ra. Ai mà chẳng muốn có pleasure, thế nhưng muốn sáng tạo thì chỉ có sự khao khát thôi là chưa đủ (sách vở gọi là duy ý chí) mà còn cần nền tảng tri thức vững chắc và sự định hướng đúng đắn từ những người đi trước. Nền tảng tri thức cũng sẽ đạt được nhanh hơn nếu được định hướng sớm hơn, tôi nghiệm ra như vậy từ kinh nghiệm của bản thân mình. Tôi ước gì tôi được gặp và trò chuyện với anh conmale sớm và nhiều hơn thì có lẽ tôi đã không lãng phí một khoảng thời gian dài để làm những điều vô bổ. Đó cũng chính là lý do tôi viết blog: để giúp những người mới hơn tôi tránh phải những sai lầm tương tự, kiểu như lá rách đùm lá nát. Đâu rồi những chiếc lá lành? Đâu rồi những conmale khác? Thay vì chửi rủa và chê bai lũ scriptkiddies, tại sao không hướng đám người trẻ nhiều nhiệt huyết đó vào con đường đúng đắn?

Hôm rồi tôi có trao đổi qua email với một anh bạn người VN đã từng trình bày kết quả nghiên cứu của mình tại khá nhiều hội thảo bảo mật uy tín trên thế giới. Tôi có khá nhiều bạn bè quen nhau qua email theo kiểu tôi vô tình thấy tên người đó và gửi email làm quen :p. Có một tin buồn và một tin vui. Tin buồn là những người mà tôi quen như trên vừa ít lại vừa không nắm thông tin về cộng đồng bảo mật ở VN. Tin vui là họ rất cởi mở, sẵn sàng trợ giúp nếu như bạn thật sự nghiêm túc. Vấn đề duy nhất còn lại là chúng ta sẽ sinh hoạt theo cách nào? Một forum, một mailing list, một IRC channel hay chính cái blog này? Bạn có ý kiến gì không? Tôi rất mong nhận được ý kiến của tất cả mọi người, nhất là những chiếc lá lành.

Xin chân thành cảm ơn đã lắng nghe,

Ngay 12/04/2016

Cuộc sống không dễ dàng, nhất là khi bạn lên kế hoạch đạt được điều gì đó có giá trị. Đừng chọn con đường đi dễ dàng. Hãy làm điều gì đó phi...