Well, my thought was perpendicular camera tracking of sorts. Each inverse kinematic bone of each finger has a ray that shoots downward and positions itself. You then use a driver to make it responsive for when the ray both intersects a desired surface, and, is within a certain radius. So actually, maybe just a spherical empty with a driver would do?
Otherwise, maybe if you animate the “child of” constraint’s weight, that might do it too.