On Thu, Apr 5, 2012 at 12:18 PM, sandeep kiran p
<sandeepkir...@gmail.com> wrote:
> Jakob,
>
> The last time we had this discussions, I mentioned when 0 is passed as the
> second argument to CreateToolhelp32Snapshot, it takes a snapshot of all the
> heaps for all the processes in the system. I was wrong. This routine only
> takes the snapshot of all heaps of a single process whose process ID is
> passed as the second argument to the call. If a 0 is passed there, it lets
> you enumerate the current process's heap. Whereas for processes and threads,
> you get a list of all the processes and threads running in the system.
>
> So even with CreateToolhelp32Snapshot (with 0 passed as second argument) you
> are just looking at the current processes's heaps. The only difference wrt
> GetProcessHeap is that, with CreateToolhelp32Snapshot you would look at all
> the heaps created within the process and not just the default heap.
Also, it does not make sense to allow a userland program to enumerate
a privileged process's memory or heap. So I doubt a userland program
will be allowed to even walk some heaps.

Additionally, suppose someone actually clamps their process' DACL to
ensure other programs [in userland under the current user] cannot read
memory? That is, remove the privileges list in "Protected Processes
for Windows Vista," Protected Processes in Windows Vista:

PROCESS_ALL_ACCESS
PROCESS_CREATE_PROCESS
PROCESS_CREATE_THREAD
PROCESS_DUP_HANDLE
PROCESS_QUERY_INFORMATION
PROCESS_QUERY_LIMITED_INFORMATION
PROCESS_SET_QUOTA
PROCESS_SET_INFORMATION
PROCESS_TERMINATE
PROCESS_VM_OPERATION
PROCESS_VM_READ
PROCESS_VM_WRITE

THREAD_ALL_ACCESS
THREAD_DIRECT_IMPERSONATION
THREAD_GET_CONTEXT
THREAD_IMPERSONATE
THREAD_QUERY_INFORMATION
THREAD_QUERY_LIMITED_INFORMATION
THREAD_SET_CONTEXT
THREAD_SET_INFORMATION
THREAD_SET_LIMITED_INFORMATION
THREAD_SET_THREAD_TOKEN
THREAD_SUSPEND_RESUME
THREAD_TERMINATE

Jeff

>  On Thu, Apr 5, 2012 at 8:30 PM, Jakob Bohm <jb-open...@wisemo.com> wrote:
>>
>> On 4/5/2012 2:22 PM, sandeep kiran p wrote:
>>>
>>> Hi,
>>>
>>> I had described about the deadlock we are seeing in Heap32First and
>>> Heap32Next APIs in my previous post. Here is where you can see the post.
>>>
>>>
>>> http://groups.google.com/group/mailing.openssl.users/browse_thread/thread/3223701a7f64a957/56d67d77c9960429?q=Deadlock+in+RAND_poll%27s+Heap32First+call#
>>>
>>> Believing that this is a problem with Windows APIs, we raised an incident
>>> with Microsoft. MS is still investigating the problem and has asked us to
>>> instead use GetProcessHeap and HeapWalk to enumerate the heap entries of the
>>> default process heap. Here is what they said
>>>
>>> "
>>>
>>> Conceptually, the biggest change between using GetProcessHeap/HeapWalk
>>> compared to Heap32First/Heap32Next is that you are accessing a heap handle
>>> to which you already have access inside of the process – the default process
>>> heap. All components are expected to use this heap and it has serialized
>>> access to ensure that multiple threads from the same process do not
>>> deadlock/corrupt the heap when accessing them simultaneously. Heap32First,
>>> on the other hand, accesses all heaps in the process, including private
>>> heaps that other components in the process created. Those private heaps
>>> might have been created with the HEAP_NO_SERIALIZE option which disallows
>>> application requested locking. Components (such as SSIS in your case)
>>> typically use this option when they perform the synchronization of memory
>>> access on their own to gain efficiency. However, if another component in the
>>> process start using those private heaps, it circumvents the synchronization
>>> that the component puts in place.
>>>
>>>  "
>>>
>>>
>>> And since we lock the heap before reading its contents, the chances of
>>> another thread working on the same heap at the same time are nullified. I
>>> have made changes to RAND_win.c to use GetProcessHeap and HeapWalk APIs.
>>> Would you be interested in accommodating the fix to mainstream code?
>>>
>>>
>>> Please let me know your comments.
>>>
>>>
>> I am afraid that MS misunderstood the situation completely and got you
>> confused too.
>>
>> Most *other* uses of heap walking are about looking at your own heap to
>> find out something about your own code, and then it makes sense to either
>> use a heap that has internal locks (the default heap or a specific heap
>> allocated without the HEAP_NO_SERIALIZE option), or to take the lock you
>> yourself is using with a specific heap allocated with HEAP_NO_SERIALIZE.
>>
>> This is the situation which MS PSS was talking about in its answer.
>>
>> But the RAND code in openSSL is using the heap walking to get as many
>> random allocation details as possible from all processes in the system to
>> seed its RNG.
>>
>> So limiting the RAND code to only a single heap from its own process will
>> effectively make that code useless and severely weaken the security of all
>> cryptographic keys and nonces produced by openSSL.  It is simply not an
>> option.
>>
>> You will have to go back to MS PSS and explain that you are not trying to
>> look at a single heap, but at all heaps of all processes and ask why the
>> "snapshot" lock in the toolhelp32 API does not protect the "non-invasive
>> debugger" (this is the relevant Microsoft phrase) calling toolhelp32 from
>> locking issues in the target process.  If they tell you to suspend the
>> process being debugged, remind them that a "non-invasive debugger" is not
>> allowed to interfere with its target in any way.
>>
>>
>> Enjoy
>>
>> Jakob
>> --
>> Jakob Bohm, CIO, Partner, WiseMo A/S.  http://www.wisemo.com
>> Transformervej 29, 2730 Herlev, Denmark.  Direct +45 31 13 16 10
>> This public discussion message is non-binding and may contain errors.
>> WiseMo - Remote Service Management for PCs, Phones and Embedded
>>
>> ______________________________________________________________________
>> OpenSSL Project                                 http://www.openssl.org
>> User Support Mailing List                    openssl-users@openssl.org
>> Automated List Manager                           majord...@openssl.org
>
>
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to